繁体   English   中英

django 中的静态/CSS 文件问题

[英]Static/CSS files issues in django

我只是 django 的新手,在进行了简单的身份验证 forms 以进行登录和注销之后。一切正常,但是每当我想对 styles (.CSS) 进行一些更改时,它都不起作用我在更改 static 文件的目录后尝试过,但都是徒劳的。 即使我从 CSS 文件中删除所有代码,页面仍然显示所有与样式相关的内容。 请建议我该怎么办? 下面我附上了我所有代码和目录的图像。

在此处输入图像描述

听起来 CSS 文件已被您的浏览器缓存。 尝试清除缓存并重新加载页面。 然后你应该看看 Django 是否加载到你的 CSS 文件中。 如果您使用 Chrome,您可以使用 CTRL + Shift + R 进行硬重新加载

您面临的问题并非特定于 Django,但您可以使用 Django 修复它。 浏览器倾向于缓存 static 文件,例如 CSS,以获得更好的性能和更低的数据消耗。
一种快速解决方法是使用浏览器清除其缓存。 解决方案取决于您的浏览器。 但是,这种方法存在两个问题。

  1. 您必须每次都清除缓存
  2. 您的用户在生产中也将面临同样的问题。 您推送更新,他们会看到 HTML 内容,CSS 的样式在浏览器清除其缓存之前不会应用。

要一劳永逸地解决这些问题,请按照以下步骤操作:

  1. 在您的settings.py添加一个 const 并将其命名为PROJECT_VERSION PROJECT_VERSION的值应该是您项目的版本。

     PROJECT_VERSION = "0.0.0.1" # replace the version number with your project version
  2. 如果没有,请创建一个templates文件夹。

  3. 在您的templates文件夹中创建一个名为templatetags的文件夹

  4. templatetags中,添加一个空文件并将其命名为__init__.py

  5. 添加另一个文件并随心所欲地调用它(我称之为custom_tags.py

  6. 在第二个文件中,添加以下内容:

     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)
  7. 在您的settins.py中,添加以下行:

     TEMPLATES = [ { 'OPTIONS': { 'libraries':{ 'custom_tags': 'templates.templatetags.custom_tags', # Add this line }, }, }, ]
  8. 现在,在您的每个模板(HTML 文件)中,将其添加到顶部:

     {% load custom_tags %}
  9. 最后一步,在引用任何 static 文件(CSS、JS、PNG 等)时,将?{% cache_bust %}添加到文件名的末尾。 请注意,这不会更改文件的内容,但会强制浏览器重新获取它。 例如:

     <link rel="stylesheet" type="text/css" href="{% static 'Style.css' %}?{% cache_bust %}" />

在调试模式下(开发时),`cache_bust` 的值每次都会改变,所以你不会对缓存有任何问题。
在生产模式下,`cache_bust` 的值将是您在 `settings.py` 中设置的项目版本。 这些文件将被缓存,但只要您更改项目的版本,浏览器就会重新获取这些文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM