如何使 DjangoTemplates 递归工作

How to make DjangoTemplates work recursively

我有一个模板 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 已正确加载,但是当我从 home.html 转到 andhra.html 时,它根本没有被 DjangoTemplating 处理。

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

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.pypolls/,因此现在 localhost:8000/polls/<state> 可以访问这些视图的 link。

现在在每个地方我都想要一个静态的 link,我通过以下方式制作了一个动态的:

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

其中 'state'urlpatternname'uttarakhand' 是输入值。