0

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

在此处输入图像描述

4

2 回答 2

2

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

于 2020-07-26T20:30:09.220 回答
0

您面临的问题并非特定于 Django,但您可以使用 Django 修复它。浏览器倾向于缓存 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. templatetags在您的文件夹内创建一个名为的templates文件夹

  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. 在 Yoursettins.py中,添加以下行:

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

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

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

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