Django:静态标记到块标记是不可能的?

时间:2014-03-26 02:28:43

标签: django static block

下面的代码会产生错误..我怎么能解决这个问题?

提前致谢:)

{% block header %}
    <link rel="stylesheet" href="{% static 'shop/style.css' %}" />
{% endblock %}

错误输出:

  • TemplateSyntaxError:无效的块标记:&#39;静态&#39;,预期&#39; endblock&#39;

6 个答案:

答案 0 :(得分:116)

不,这不是不可能的。尝试在同一html文件中包含{% load staticfiles%},而不是尝试从某些base.html继承它。

答案 1 :(得分:10)

在settings.py中

1。)添加A TUPLE:

STATIFILES_DIR =(         os.path.join(BASE_DIR,'assets'), )

在urls.py中

2。)添加:

 from django.contrib.staticfiles.urls import staticfiles.urlpatterns
 urlpatterns += staticfile_urlpatterns()

3.。)在html文件中你要放置“link rel ='stylesheet'..”,只需添加到顶部:

{% load static from staticfiles %}

 and then use :

 <link rel="stylesheet" href="{% static 'assets/css' %}"

答案 2 :(得分:0)

我的解决方案是include另一个带有{% load static %}的页面和带有静态引用的脚本。 {% block xxx %}期望第一个{% yyy %}不是{% include %}{% endblock %}(我观察到的唯一案例);因此,当我们使用"{% static 'xxx.js' %}"时,它会中断和抱怨。但是包括另一页将使Django平静下来。

例如,我有一个页面homepage,它扩展了base.html并且有一些静态js文件,这些文件未包含在base.html中。

base.html

{% block page %}

{% endblock %}
{% block script %}

{% endblock %}

homepage.html

{% extends 'base.html' %}
{% block page %}
...
{% endblock %}
{% block script %}
    {% include 'home_js.html'%}  <!-- don't use static links here because Django does not like it. -->
{% endblock %}

home_js.html

{% load static %}
<script src="{% static 'scripts/jquery.js' %}" ></script>
<script>
    function ...
</script>

现在加载脚本。

因此,在一个区块中,我们无法使用{% %}{% block xxx %}以外的{% endblock %}标记。

我正在使用Django 5.1。

编辑:

在这种情况下,我发现{% verbatim %}标签是我们的救星。

答案 3 :(得分:0)

只需将{% load static %}添加到模板的顶部 之后{% extends 'app/base.html' %}

答案 4 :(得分:0)

如果您使用的是Apache,请确保已将虚拟主机配置为提供静态文件,例如在000-default.conf

<VirtualHost *:80>
    ServerName www.example.com

    ServerAdmin webmaster@localhost

    Alias /static /home/Dev/cfehome/src/static
        <Directory /home/Dev/cfehome/src/static>
           Require all granted
         </Directory>

    <Directory /home/Dev/cfehome/src/cfehome>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess cfehome python-path=/home/Dev/cfehome/src:/home/Dev/cfehome/lib/python3.7/site-packages
    WSGIProcessGroup cfehome
    WSGIScriptAlias / /home/Dev/cfehome/src/cfehome/wsgi.py


    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

答案 5 :(得分:-1)

是。 Django不允许这样做。

您可以使用适当的路径,如:

<link rel="stylesheet" href="/static/shop/style.css" />

但请注意:如果您更改了应用STATIC_URL,则上述href也必须相应更新。

来自 Configuring static files

  

在您的模板中,要么像/static/my_app/example.jpg一样对网址进行硬编码,要么最好使用静态模板标记......