如何使 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.py
有 polls/
,因此现在 localhost:8000/polls/<state>
可以访问这些视图的 link。
现在在每个地方我都想要一个静态的 link,我通过以下方式制作了一个动态的:
href="{% url 'state' 'uttarakhand' %}"
其中 'state'
是 urlpattern
的 name
,'uttarakhand'
是输入值。
我有一个模板 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.py
有 polls/
,因此现在 localhost:8000/polls/<state>
可以访问这些视图的 link。
现在在每个地方我都想要一个静态的 link,我通过以下方式制作了一个动态的:
href="{% url 'state' 'uttarakhand' %}"
其中 'state'
是 urlpattern
的 name
,'uttarakhand'
是输入值。