Python / Django - 组织样式表和脚本

1 投票
4 回答
1226 浏览
提问于 2025-04-16 11:40

我想找一种简单的方法来整理Django中的样式表和脚本。我对这个框架和Python语言还比较陌生,之前是用PHP的。

在PHP/Zend的世界里,有一些函数是通过视图/布局对象来实现的。只需在你的头部标签中加一行代码,就可以很方便地在视图的方法中添加样式表或脚本。我看过Django的表单媒体文档,但那只是针对需要特定样式和脚本的表单。

有没有什么建议?

4 个回答

0

看起来你可能是在寻找一种方法,根据当前页面的不同来有条件地加载样式表。这可以通过使用模板标签来实现。

在你的 base.html 文件中,你需要创建一个区域来添加样式表。

{% block addl_styles %}{% endblock %}

然后在你想要加载样式的页面中,你可以使用相同的区域,并加上 block.super,这样就可以把你的样式添加到应用程序调用的其他脚本后面。

所以在你的表单模板中,你可以使用类似下面的代码:

{% block addl_styles %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}your_css_folder/example.css" />
{% endblock %}

请注意,你可以通过 {{ MEDIA_URL }} 来安全地添加基础目录,这样就能顺利找到你的文件夹。

2

要知道,从 Django 1.3 开始,之前的静态文件应用已经并入了 django.contrib

最重要的是,你可以把你的静态媒体文件放在任何一个在 settings.INSTALLED_APPS 中的应用的 static/ 子目录里,这些文件会通过 collectstatic 这个管理命令自动收集起来。

我就不再重复解释了,直接给你指个方向,你可以查看文档: Django: the staticfiles app

你可能还想找一些工具来处理你的文本类静态文件(比如 CSS 和 JavaScript),这些文件可以很方便地合并、压缩和版本管理。我也正准备深入研究这个,所以现在还没有相关链接。

5

看看django.contrib.admin这个应用。

可以参考一下这个管理网站是怎么运作的。

  1. 首先,创建一个媒体目录。

  2. 然后,在这个目录下再创建一些子目录,比如media/img、media/jss、media/css,或者其他你需要的目录。

  3. 在每个子目录里,放入你应用特有的文件。比如media/img/app1、media/jss/app1,这样每个Django应用就可以有自己独特的媒体文件,不会互相冲突。

  4. 确保你的设置里有MEDIA_ROOT这个选项。你可以在Django的文档中查阅相关内容。你还需要为部署设置MEDIA_URL。此外,你还得弄明白怎么让你的网页服务器(比如Apache)来提供这些媒体文件。

Django不应该直接提供像.js库、.css文件或任何图片这样的静态文件。这是浪费时间。Apache可以很好地处理这些文件。不过,为了测试,你可以在Django网站里启用一个简单的文件服务器功能。

最后,也是最重要的一点。

确保你的页面模板里实际引用了你想要在页面上显示的各种文件,比如 {{MEDIA_URL}}css/site.css{{MEDIA_URL}}js/app1/something.js

撰写回答