我只是 django 的新手,并且在为登录和注销制作了一个简单的身份验证表单之后。一切都运行良好,但是每当我想对样式(CSS)进行一些更改时,它都不起作用。我在更改静态文件的目录后尝试过,但都是徒劳的。即使我从 CSS 文件中删除所有代码,页面仍然显示所有与样式相关的内容。请建议我该怎么办?下面我附上了我所有代码和目录的图像。
2 回答
听起来 CSS 文件已被您的浏览器缓存。尝试清除缓存并重新加载页面。然后你应该看看 Django 是否正在加载你的 CSS 文件。如果您使用 Chrome,您可以使用 CTRL + Shift + R 进行硬重新加载
您面临的问题并非特定于 Django,但您可以使用 Django 修复它。浏览器倾向于缓存 CSS 等静态文件,以获得更好的性能和更低的数据消耗。
一种快速解决方法是使用浏览器清除其缓存。解决方案取决于您的浏览器。但是,这种方法存在两个问题。
- 您必须每次都清除缓存
- 您的用户在生产中也将面临同样的问题。您推送更新,他们会看到 HTML 内容,在浏览器清除其缓存之前不会应用 CSS 中的样式。
要一劳永逸地解决这些问题,请按照以下步骤操作:
在您
settings.py
添加一个 const 并将其命名为PROJECT_VERSION
. 的值PROJECT_VERSION
应该是您项目的版本。PROJECT_VERSION = "0.0.0.1" # replace the version number with your project version
创建一个
templates
文件夹,如果你没有它。templatetags
在您的文件夹内创建一个名为的templates
文件夹在里面
templatetags
,添加一个空文件并调用它__init__.py
添加另一个文件并随心所欲地调用它(我称之为
custom_tags.py
)在第二个文件中,添加以下内容:
from django import template from django.conf import settings import uuid register = template.Library() @register.simple_tag(name='cache_bust') def cache_bust(): if settings.DEBUG: version = uuid.uuid1() else: version = settings.PROJECT_VERSION return '__v__={version}'.format(version=version)
在 Your
settins.py
中,添加以下行:TEMPLATES = [ { 'OPTIONS': { 'libraries':{ 'custom_tags': 'templates.templatetags.custom_tags', # Add this line }, }, }, ]
现在,在您的每个模板(HTML 文件)中,将其添加到顶部:
{% load custom_tags %}
最后一步,在引用任何静态文件(CSS、JS、PNG 等)时,添加
?{% cache_bust %}
到文件名的末尾。请注意,这不会更改文件的内容,但会强制浏览器重新获取它。例如:<link rel="stylesheet" type="text/css" href="{% static 'Style.css' %}?{% cache_bust %}" />
在调试模式下(开发时),`cache_bust` 的值每次都会改变,所以你不会对缓存有任何问题。
在生产模式下,`cache_bust` 的值将是您在 `settings.py` 中设置的项目版本。这些文件将被缓存,但只要您更改项目的版本,浏览器就会重新获取这些文件。