如何链接Django页面中的资源

时间:2014-05-14 22:40:48

标签: python django

假设我有一个必须包含一个JavaScript文件的HTML页面(base.html)。

<script type="text/javascript" src="/js/main.js"></script>

据我所知,Django项目不是托管在公共文件夹中。相反,请求被路由到views.py,从而生成响应。

假设我的项目目录看起来像这样

- project
- project_app
    - views, models, ecc…
- templates
    - base.html
    - css
        - main.css
    - js
        - main.js

base.html如何引用main.cssmain.js?如果我访问myserver.com/js/main.js,则不应返回任何内容(因为模板文件夹不公开)。然而,浏览器需要访问这些文件,我需要包含它们。

我是否需要编写特定的URL规则来将请求重定向到/js/main.js到实际的js文件,或者什么样的魔术可以使简单的html包含工作?

2 个答案:

答案 0 :(得分:1)

您需要使用命令django-admin.py collectstatic将所有静态文件放在STATIC_ROOT文件夹中并提供此文件夹。您可以在此处找到更多详细信息和解释:

https://docs.djangoproject.com/en/dev/howto/static-files/#managing-static-files-css-images

答案 1 :(得分:1)

通常的方法是将CSS,javascript和类似文件保存在static文件夹中,并将它们提供给您的html。可以找到常规Django文档here

简而言之,您的目录将如下所示:

- project
- project_app
    - views, models, ecc…
- templates
    - base.html
- static
    - css
        - main.css
    - js
        - main.js

然后,您的base.html将使用以下方式引用该文件:

<script type="text/javascript" src="/static/js/main.js"></script>

我在顶部引用的文档显示了如何在生产中提供静态文件。很多人使用内容分发网络(CDN)来提供静态文件。亚马逊的S3服务就是一个例子。然后,您将STATIC_URL中的settings.py设置更改为S3存储桶(或类似网络)。然后,您可以在模板中引用STATIC_URL

{% load static %}
...
<script type="text/javascript" src="{% static 'js/main.js' %}"></script>
...

您将使用./manage.py collectstatic等命令收集静态文件,并在特定时间将其移至CDN。可以找到collectstatic的基础here