[英]Do I need to load staticfiles in included HTML in Django?
我處於DEBUG狀態,我想使用PrinceXML將HTML頁面呈現為PDF。
在我的主要HTML中,我有:
{% extends "base.html" %}
{% load staticfiles %}
{% load url from future %}
{% block title %}Title{% endblock %}
{% block style %}
{% include "style.html" %}
<link rel="stylesheet" type="text/css" href="{% static "more.style.css" %}"/>
{% endblock %}
{% block branding %}<a class='brand' rel="nofollow" href="{% url 'url' %}">Brand</a>{% endblock %}
{% block userlinks %}
{% if user.is_authenticated %}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
{{ user }}
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="{% url 'generate-pdf' %}">Get the doc in pdf</a></li>
<li><a href="{% url 'dashboard.views.index' %}">Home</a></li>
<li><a href="{% url 'logout' %}">Logout</a></li>
</ul>
</li>
{% endif %}
{% endblock %}
我的style.html是生成PDF所需的princeXML信息:
@page {
margin-left: 0.8cm;
margin-right: 0.8cm;
margin-bottom: 2cm;
margin-top: 4cm;
@top-left {
margin-left: -0.6cm;
margin-right: -0.6cm;
content: url({% static "url" %});
}
@bottom-right {
border-top: solid 1px #bbb;
margin-top: 0.4cm;
vertical-align: middle;
font-size: 8pt;
content: counter(page) "/" counter(pages)
}
@bottom-center {
border-top: solid 1px #bbb;
margin-top: 0.4cm;
vertical-align: middle;
font-size: 8pt;
content: "{% now 'j.m.Y' %}"
}
@bottom-left {
border-top: solid 1px #bbb;
margin-top: 0.4cm;
padding-right: 2cm;
vertical-align: middle;
font-size: 8pt;
content: "footer info"
}
size: A4
}
html {
font-family: Arial, Verdana, Geneva, Helvetica, sans-serif ;
}
div.page-header {
page-break-before: always
}
我的問題是:當我將樣式包含到已經{%load staticfiles%}的HTML中時,是否需要在style.html中再次載入呢?
我的猜測是肯定的,因為正如Django文檔中所述,include將使用我的主要html上下文呈現style.html,但是staticfiles庫不是上下文的一部分。 我對嗎 ?
從Django文檔中 :
include標記應被視為“呈現此子模板並包含HTML”的實現,而不應視為“解析此子模板並像其父對象一樣包含其內容”。 這意味着在包含的模板之間沒有共享狀態-每個包含都是一個完全獨立的呈現過程。
因此,是的,您的包含模板不知道您的主要HTML中發生了什么,因此您也應該在包含的模板中包含staticfiles
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.