使用静态模板标记

时间:2018-02-28 16:42:37

标签: javascript python django

我正在尝试按照https://docs.djangoproject.com/en/2.0/howto/static-files/上的说明操作,但我遇到了意想不到的结果。我有一个带有dashboard应用程序的Django项目,如下所示:

.
├── dashboard
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── 0002_auto_20180227_2103.py
│   │   ├── 0003_auto_20180227_2304.py
│   │   └── __init__.py
│   ├── models.py
│   ├── static
│   │   └── dashboard
│   │       └── dashboard.js
│   ├── templates
│   │   └── dashboard
│   │       ├── checkin_detail.html
│   │       ├── checkin_form.html
│   │       └── checkin_list.html
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
└── my_project
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

在我的项目settings.py中,STATIC_URLdjango-admin startproject创建的一致:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'

dashboard.js文件是一个简单的测试脚本:

alert("Hello, world!");

我正在尝试使用checkin_form.html模板中的Javascript,如下所示:

{% load static %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src={% static "dashboard/dashboard.js" %}></script>

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Send message" />
</form>

我的观点继承自Django的通用视图类:

from django.views import generic
from .models import CheckIn


class CheckInCreate(generic.CreateView):
    model = CheckIn
    fields = '__all__'


class CheckInUpdate(generic.UpdateView):
    model = CheckIn
    fields = '__all__'

但是,当我导航到该视图呈现的URL时,我看不到“Hello,world!”的警报。有人能指出我这个配置/实现有什么问题吗?

3 个答案:

答案 0 :(得分:1)

此行中需要更多报价

<script src={% static "dashboard/dashboard.js" %}></script>

应该是

<script src="{% static "dashboard/dashboard.js" %}"></script>

当您开发它时,最好打开浏览器的开发工具(F12)并关闭缓存。

在制作中,如果您希望用户看到您的更改,则每次内容更改时都需要更改文件名。你可以这样做,例如通过添加版本号(即dashboard-v1.0.0.js)。 js-world中有很多工具可以进行缩小/版本控制等。对你而言。

答案 1 :(得分:0)

过了一会儿,我发现Javascript确实有效(没有STATIC_ROOT的任何其他配置);它可能只需要一些时间让浏览器注册&#39;变化。

答案 2 :(得分:0)

请查看语法的答案-用法应为双引号内的单引号

    src="{% static 'dashboard/dashboard.js' %}">

不是

    src="{% static "dashboard/dashboard.js" %}">

此内容包含在“ script / script” html元素内

由于将字符串括在字符串中。