服务静态文件django开发

时间:2014-02-13 21:21:30

标签: django

我知道有一百万人问过这个问题,而且我已经阅读并阅读但仍然无法让这个工作(我认为这说明文件咳嗽了一些)。

ONE。 CSS: 以下是我的设置:

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'))
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static")
STATIC_ROOT = '/static/'
STATIC_URL = '/static/'

也相关:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
    'blog',
)

我的模板服务很好,而我的css不是。它位于static / originaltheme.css

我试过了两个:

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}originaltheme.css">

<link rel="stylesheet" type="text/css" href="/static/originaltheme.css">

TWO。此外,有没有办法让硬编码的网址显示?例如,假设博客文章的内容有一个硬编码的网址/static/img1.jpg,我该怎么办?所有文档都指向{{static_url}},但我猜测从数据库的文本字段返回时不会被评估...

与我的网址有什么关系吗?

from django.conf.urls import patterns, include, url

from django.contrib import admin
from django.conf.urls.static import static
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'nickswebsite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^$', 'blog.views.index'),

    url(r'^blog/view/(?P<slug>[^\.]+)',
    'blog.views.view_post',
    name='view_blog_post'),

    url(r'^blog/category/(?P<slug>[^\.]+)',
    'blog.views.view_category',
    name='view_blog_category'),

    url(r'^admin/', include(admin.site.urls)),
)

编辑:

我试过这样做是在网址:

urlpatterns = patterns('',
    url(r'^$', 'blog.views.index'),

    url(r'^blog/view/(?P<slug>[^\.]+)',
    'blog.views.view_post',
    name='view_blog_post'),

    url(r'^blog/category/(?P<slug>[^\.]+)',
    'blog.views.view_category',
    name='view_blog_category'),

    url(r'^admin/', include(admin.site.urls)),
) + static(settings.STATIC_URL, document_root=setting.STATIC_ROOT)

urlpatterns += staticfiles_urlpatterns()

但我正在设置&#34;设置&#34;未定义的错误。我尝试导入设置,但仍然出现错误。


修改

好的,服务静态开发服务器的文档是可怕的。无论谁写它都应该重写它。这个人是全世界唯一一个似乎清楚地解释清楚的人:http://agiliq.com/blog/2013/03/serving-static-files-in-django/#servee

你在settings.py中需要这些(为什么它们不包括在最初的安装中......天才......):

STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
   'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

你不需要这些:     STATICFILES_DIRS =(os.path.join(BASE_DIR,&#34; static&#34;)     STATIC_ROOT =&#39; / static /&#39;

你不需要:

manage.py collectstatic

http://agiliq.com/blog/2013/03/serving-static-files-in-django/#servee

  

需要注意的要点

     

我们没有对Django向我们提供的任何静态设置进行任何更改。我们将静态设置保留为Django提供的默认settings.py。

     

您不需要对urls.py进行任何更改即可在开发中提供静态文件。您不需要添加staticfiles_urlpatterns()。很多次,我对此感到困惑。

     

您不需要python manage.py collectstatic来在开发中提供静态文件。

4 个答案:

答案 0 :(得分:3)

我也反对这个特殊问题。最后提出了this blog post

实际上您不需要collectstaticSTATICFILES_FINDERdjango.contrib.staticfiles。他们都是相关的。阅读blog post

答案 1 :(得分:1)

我将这些行添加到my url.py的底部:

if settings.DEBUG:
urlpatterns += patterns('',
                        url(r'^uploads/(?P<path>.*)$', 'django.views.static.serve', {
                            'document_root': settings.MEDIA_ROOT,
                        }),
)

这是my settings.py

STATICFILES_DIRS = ()

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

答案 2 :(得分:0)

您使用过:

./manage.py collectstatic

此外,您的STATIC_ROOT应该是目录静态文件的绝对路径:

STATIC_ROOT = os.path.normpath(os.path.join(BASE_DIR, "static"))

答案 3 :(得分:0)

这是我使用上述答案为Django 2.0所做的。因此,您需要一个易于部署的系统。

<强> settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Serve Static in Development

STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATICFILES_DIRS = [os.path.join(BASE_DIR, "appName/static/appName")]

# Serve static in production

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

然后创建一个目录〜/ documentRoot / appName / static / appName /并将我的png复制到其中。然后在我的模板中:

<head>
  <bootstrap,jquery,etc...>
  {% load staticfiles %}
</head>
<body>
<img class="mb-4" src="{% static "myImage.png" %}" alt="" width="72" height="72">
</body>

然后,当您想要部署时,只需运行collectstatic,它们将在一个地方提供服务。每次添加应用程序时,都要添加到静态目录列表中。