Django 1.6.1:静态标签不起作用

Posted

技术标签:

【中文标题】Django 1.6.1:静态标签不起作用【英文标题】:Django 1.6.1: static tag not working 【发布时间】:2014-02-16 05:17:45 【问题描述】:

我在这上面花了几个小时,到处找,但无法弄清楚,所以我曾经向更有经验的人寻求帮助。

这不是我第一次创建 django 应用程序,所以我参考了我之前所做的,但没有任何帮助。我正在尝试使用“静态”模板标签提供静态文件,但它不起作用。

我很确定我正确设置了所有内容(按照教程和我以前的项目;我将在下面提供设置),但是当我在本地运行服务器时,它找不到我的静态文件。当我用 STATIC_URL 标签替换静态模板标签时,它可以工作。我什至在浏览器中输入静态文件的直接路径,它们都可以工作。我得到 CSS 和 JS 文件的输出。静态模板标签不起作用,这让我抓狂。

这是我的设置:

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = 'staticfiles'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/w/static/'

# URL prefix for admin static files -- CSS, javascript and images.
# Make sure to use a trailing slash.
# Examples: "http://foo.com/static/admin/", "/static/admin/".
#ADMIN_MEDIA_PREFIX = '/admin/media/'

# Additional locations of static files
STATICFILES_DIRS = (
   os.path.join(PROJECT_DIR, 'static/'),
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.

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

INSTALLED_APPS = (
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.sites',
   'django.contrib.messages',
   'django.contrib.staticfiles',)

顺便说一句,我检查了静态文件夹的路径,它是正确的。我故意不包括应用程序的名称,所以它就在那里。我还包括 %load static from staticfiles% 标签。正如我提到的,只有静态标签不起作用。请有人解释一下我犯了什么愚蠢的错误。

谢谢

【问题讨论】:

【参考方案1】:

我正在使用 django 1.6.1

这是我的设置:

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

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

我的文件结构如下:

我的网站 我的应用 静止的 模板 管理.py

编辑:

这是 % load staticfiles % 而不是 %load static from staticfiles%

你不需要使用 STATIC_ROOT 除非你试图在每个应用程序中都有一个静态文件夹,我相信

我有这个question 例如 .jpg != .jpeg!所以也要寻找那个错误

【讨论】:

我的 BASE_DIR 是 PROJECT_DIR = os.path.join(os.path.dirname(file), os.pardir) 我手动检查过,它是正确的。我也试过 % load staticfiles % ,我有同样的问题。这是一个奇怪的问题,因为我刚刚测试了我在 1.5 上运行的另一个应用程序并且一切正常。这只是让我心烦。 BASE_DIR 和 PROJECT_DIR 是任意的,它们仅用于定位您的 STATIC 和 TEMPLATE 和 MEDIA 目录......所以试试我的设置,看看你是否成功。如您所见,我的基本目录是 mysite,我所有的静态内容都在静态文件夹中。如果您不想尝试这样做,那么我建议您确保所有内容都拼写正确。并尝试基本的事情,即消除以找到最可能的原因。如果您需要更多帮助,请多加评论! 我不知道这是什么巫术,但它奏效了。我的文件结构与您的相同,但使用您查找 BASE_DIR 的方式有所不同。我不知道为什么,因为我以前的做法很有效。无论如何,谢谢。

以上是关于Django 1.6.1:静态标签不起作用的主要内容,如果未能解决你的问题,请参考以下文章

链接到 django 静态文件不起作用

Django 2.2静态文件在生产中不起作用(DEBUG False)[重复]

django - url标签不起作用

用户身份验证模板标签不起作用-Django

JQuery 在 Django 自定义模板标签的模板中不起作用

如果模板标签不起作用,则在 Django 中过滤