如何使DjangoTemplates递归工作

时间:2019-01-16 17:30:35

标签: html django templating

我有一个模板home.html,它是Django中应用程序的视图。现在,我在html文件中添加了一些模板,以允许动态生成HTML。例如,我使用{% load static %},然后使用href="{% static "path/to/resources" %}"。因此,当我打开应用程序时,运行服务器后,将动态创建路径。

现在,问题在于,动态加载的静态文件还需要加载其他静态文件(以及扩展模板)。我以为DjangoTemplating可能会递归地工作,并且也可以在被调用的文件上工作,但是可悲的是那不是真的。

那么,我该怎么做才能确保Django将所有模板逻辑都考虑在内并允许其运行?


home.html代码段:

{% load static %}
<area alt="andhra" title="Andhra Pradesh" name="andhra" href="{% static  "personal/pages/andhra.html" %}" shape="poly" ... />

andhra.html类似于:

{% extends "personal/post.html" %}

{% blockcontent %}
  <style>
   #slider
   {
     width: 80%;
....
<div class="carousel-inner">
    <div class="carousel-item active">
        {% load static %}
        <img class="d-block w-100" src="{% static "personal/images/andhraImages/1911-1915.jpg" %}" alt="First slide">
    </div>
...
{% endblock %}

要扩展模板:post.html,其模板中包含{% blockcontent %}{% endblock %}

andhra.html未被模板处理。也就是说,当我打开应用程序home.html时,已正确加载,但是当我从andhra.html转到home.html时,DjangoTemplating完全不会对其进行处理。

1 个答案:

答案 0 :(得分:1)

因此,正如Daniel Roseman在评论中所说,将文件作为静态文件加载是行不通的。我们希望django渲染它们。因此,我在state中创建了一个函数views.py

def state(request,state):
    return render(request,'personal/pages/'+state+'.html')

这意味着它将尝试在templates/personal/pages/<state>.html处渲染文件。现在我的urls.py如下:

urlpatterns = [
    path('',views.index,name='index'),
    path('<state>',views.state,name="state")
]

请注意,这属于应用polls。现在,由于mysite的urls.py具有polls/,因此localhost:8000/polls/<state>现在可以访问这些视图的链接。

现在在每个地方我都想要一个静态链接,我通过以下方式创建了一个动态链接:

href="{% url 'state' 'uttarakhand' %}"

其中'state'name的{​​{1}},而urlpattern是输入值。