tengke 发表于 2023-12-29 16:49:51

css和js加载问题

一下是 views.py的内容
def your_view(request):
    css_files = ['css/bootstrap.css',
               'css/bootstrap.css.map',
               'css/bootstrap-grid.css',
               'css/bootstrap-grid.css.map',
               'css/bootstrap-grid.min.css',
               'css/bootstrap-grid.min.css.map',
               'css/bootstrap-grid.rtl.css',
               'css/bootstrap-grid.rtl.css.map',
               'css/bootstrap-grid.rtl.min.css',
               'css/bootstrap-grid.rtl.min.css.map',
               'css/bootstrap.min.css',
               'css/bootstrap.min.css.map',
               'css/bootstrap-reboot.css',
               'css/bootstrap-reboot.css.map',
               'css/bootstrap-reboot.min.css',
               'css/bootstrap-reboot.min.css.map',
               'css/bootstrap-reboot.rtl.css',
               'css/bootstrap-reboot.rtl.css.map',
               'css/bootstrap-reboot.rtl.min.css',
               'css/bootstrap-reboot.rtl.min.css.map',
               'css/bootstrap.rtl.css',
               'css/bootstrap.rtl.css.map',
               'css/bootstrap.rtl.min.css',
               'css/bootstrap.rtl.min.css.map',
               'css/bootstrap-theme.css',
               'css/bootstrap-theme.css.map',
               'css/bootstrap-theme.min.css',
               'css/bootstrap-theme.min.css.map',
               'css/bootstrap-utilities.css',
               'css/bootstrap-utilities.css.map',
               'css/bootstrap-utilities.min.css',
               'css/bootstrap-utilities.min.css.map',
               'css/bootstrap-utilities.rtl.css',
               'css/bootstrap-utilities.rtl.css.map',
               'css/bootstrap-utilities.rtl.min.css',
               'css/bootstrap-utilities.rtl.min.css.map',
               'css/css404.css',
               'css/css.css',
               'css/eCommerceStyle.css',
               'css/index.css',
               'css/style404.css',
               'css/style.css']
    return render(request, 'rootyongh.html', {'css_files': css_files})
def css_filejs(request):
    js_files = ['js/bootstrap.bundle.js',
                'js/bootstrap.bundle.js.map',
                'js/bootstrap.bundle.min.js',
                'js/bootstrap.bundle.min.js.map',
                'js/bootstrap.esm.js',
                'js/bootstrap.esm.js.map',
                'js/bootstrap.esm.min.js',
                'js/bootstrap.esm.min.js.map',
                'js/bootstrap.js',
                'js/bootstrap.js.map',
                'js/bootstrap.min.js',
                'js/bootstrap.min.js.map',
                'js/jquery-3.6.0.min.js',
                'js/jquery.js',
                'js/jquery.min.js',
                'js/npm.js',
                'js/vue.min.js']
    return render(request, 'rootyongh.html', {'js_files': js_files})

然后我在html界面这样写
{% load static %}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>eCommerce template By Adobe Dreamweaver</title>

{% for css_file in css_files %}
    <link rel="stylesheet" href="{% static css_file %}">
{% endfor %}
{% for js_file in js_files %}
    <script src="{% static js_file %}"></script>
{% endfor %}
前台css和js没有加载 这个是为什么呢

不二如是 发表于 2023-12-29 16:49:52

从鱼油现有代码,可知CSS和JS文件在前端没有加载,可能的原因有几个:


[*]路径问题:确保 css_files 和 js_files 中的路径正确指向了静态文件夹中相应的CSS和JS文件。如果路径错误,文件将无法正确加载。
[*]模板上下文:确保在调用 render 函数时,正确传递了 css_files 和 js_files 到模板的上下文中。如果这些变量没有正确传递,模板将无法访问它们。
[*]Django静态文件设置:检查Django项目的静态文件设置。确保在 settings.py 文件中正确设置了 STATIC_URL 和 STATICFILES_DIRS。
[*]模板渲染问题:确认 {% static css_file %} 和 {% static js_file %} 正确解析为静态文件的URL。如果Django模板引擎没有正确处理这些模板标签,静态文件将无法加载。
[*]浏览器缓存问题:有时浏览器缓存可能导致静态文件更新不显示。尝试清除浏览器缓存或使用无痕模式访问页面。
[*]服务器配置:如果您使用的是生产服务器,确保静态文件服务配置正确。

请一一排查~

FishC 发表于 2023-12-29 16:50:03

首先,从你提供的代码来看,你在`your_view`函数和`css_filejs`函数中都没有给`css_files`和`js_files`变量赋值。这将导致在渲染模板时,这两个变量为空。

要解决这个问题,你需要在这两个函数中给这两个变量赋值。具体的方法如下:

在`your_view`函数中,你可以通过读取静态文件夹(通常是名为`static`的文件夹)中的样式表文件,并将其添加到`css_files`列表中。示例代码如下:

import os

def your_view(request):
    css_files = []
   
    # 获取静态文件夹中的样式表文件
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.css'):
            css_files.append(file_name)
   
    return render(request, 'rootyongh.html', {'css_files': css_files})

同样地,在`css_filejs`函数中,你可以用相同的方法获取并添加JavaScript文件到`js_files`列表中。示例代码如下:

import os

def css_filejs(request):
    js_files = []
   
    # 获取静态文件夹中的JavaScript文件
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.js'):
            js_files.append(file_name)
   
    return render(request, 'rootyongh.html', {'js_files': js_files})

确保你在视图文件的开头导入`os`模块。

此外,在你的HTML模板中,你需要在样式表和JavaScript的迭代循环中正确引用这些文件。示例如下:

{% for css_file in css_files %}
    <link rel="stylesheet" type="text/css" href="{% static css_file %}">
{% endfor %}

{% for js_file in js_files %}
    <script src="{% static js_file %}"></script>
{% endfor %}

请注意,上述示例假设您已经在Django的settings.py文件中正确配置了静态文件目录,并且在模板中使用了`{% load static %}`标签。

希望以上解释能够帮助你解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

tengke 发表于 2023-12-29 16:59:21

import os
def your_view(request):
    css_files = []
    # 获取静态文件夹中的样式表文件
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.css'):
            css_files.append(file_name)
    return render(request, 'rootyongh.html', {'css_files': css_files})
def css_filejs(request):
    js_files = []
    # 获取静态文件夹中的JavaScript文件
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.js'):
            js_files.append(file_name)
    return render(request, 'rootyongh.html', {'js_files': js_files})


{% load static %}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>eCommerce template By Adobe Dreamweaver</title>

{% for css_file in css_files %}
    <link rel="stylesheet" type="text/css" href="{% static css_file %}">
{% endfor %}
{% for js_file in js_files %}
    <script src="{% static js_file %}"></script>
{% endfor %}按照你提供的还是没有样式

FishC 发表于 2023-12-29 16:59:34

tengke 发表于 2023-12-29 16:59
import os
def your_view(request):
    css_files...

看起来你已经在视图函数中获取了静态文件的路径和文件名,并将它们存储在`css_files`和`js_files`列表中。但是,在返回渲染的模板时,你传递的是空的`css_files`和`js_files`列表,这就是为什么没有样式加载的原因。

要解决这个问题,你需要将`css_files`和`js_files`列表作为上下文变量传递给正确的模板。在`your_view`函数和`css_filejs`函数中,你可以使用`locals()`方法将局部变量作为字典传递给模板。示例代码如下:

def your_view(request):
    css_files = []
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.css'):
            css_files.append(file_name)
    return render(request, 'rootyongh.html', locals())

def css_filejs(request):
    js_files = []
    static_dir = os.path.join(BASE_DIR, 'static')
    for file_name in os.listdir(static_dir):
      if file_name.endswith('.js'):
            js_files.append(file_name)
    return render(request, 'rootyongh.html', locals())

在这种情况下,模板会接收到局部变量`css_files`和`js_files`,并将其作为上下文变量使用。

另外,请确保在你的HTML模板中,你在样式表和JavaScript的迭代循环中正确引用这些文件。示例如下:

{% load static %}
eCommerce template By Adobe Dreamweaver

{% for css_file in css_files %}
    <link rel="stylesheet" type="text/css" href="{% static css_file %}">
{% endfor %}
{% for js_file in js_files %}
    <script src="{% static js_file %}"></script>
{% endfor %}

在这个示例中,我们使用了`{% static %}`标签来正确生成静态文件的URL。

希望以上解释能够帮助你解决问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sunbeam22 发表于 2024-1-2 13:01:27

不了解你没有把urls.py的路由绑定到views.py中的函数,应该访问urls中的路由,再到这个视图函数,再返回给浏览器对应的html文件,在返回html中会渲染这些模板
页: [1]
查看完整版本: css和js加载问题