我正在尝试从django模板中包含一个静态html页面。
我尝试使用{% include the_static.html %}
,但由于某些未知原因,这不起作用。
the_static.html页面是一个经常使用html编辑器修改的数据页面
my_model有一个这个html的URL和include
它。但是django拒绝找到它,虽然我确信我已经正确设置了路径。
答案 0 :(得分:6)
您可以编写custom template tag来执行此操作。
在includestatic.py
下创建名为appname/templatetags/
的文件。此外,请记住创建appname/templatetags/__init__.py
,将应用程序包含在设置中并重新启动服务器。
includestatic.py
应该有以下代码:
from django import template
from django.contrib.staticfiles import finders
from django.utils.html import escape
register = template.Library()
@register.simple_tag
def includestatic(path, encoding='UTF-8'):
file_path = finders.find(path)
with open(file_path, "r", encoding=encoding) as f:
string = f.read()
return escape(string)
要在模板中使用它,请将{% load includestatic %}
放在模板顶部,然后使用{% includestatic "app/file.txt" %}
等标记。
答案 1 :(得分:1)
我不确定我是否了解所有内容...
你有一个Django在给定网址上提供的HTML页面,我们假设它是http://mydjangodomain/get_the_static/
。此URL在您的模型的urls.py中设置。好的,这很正常。
您有此模型的django模板。我们假设它在模板目录mytemplates/mymodeltemplates/
中定义,并且它被称为myfrontpage.html
(因为在Django模板中是html文件)。
我猜你在你的urls.py中定义了一个URL到服务器那个首页?我们假设它是http://mydjangodomain/get_the_front_page/
现在我不明白您的首页如何使用静态HTML。您的最终首页html是否需要静态的URL以获取“src”属性或类似内容,或者您是否需要将静态html包含在首页的html中?
在第一种情况下,您已经拥有了网址http://mydjangodomain/get_the_static/
,因此只需使用它即可。
在第二种情况下,您不需要以前的URL,可以驾驭它。此外,将the_static.html放在mytemplates/mymodeltemplates/
中。然后你需要{% include "/mymodeltemplates/the_static.html" %}
标签。如果这不起作用,请确保您的设置中包含以下内容:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
APPLI_ROOT_PATH = "<absolute_path_to_the_application_root_on_your_server>"
TEMPLATE_DIRS = (
'%s/mytemplates' % APPLI_ROOT_PATH,
)
答案 2 :(得分:0)
复活死人的类型,但至少在django 1.10,这里有一个非常干净的答案: http://www.effectivedjango.com/tutorial/static.html
该页面的摘录:
简单模板包含我们希望将Boostrap CSS添加到所有 我们的模板,但我们想避免重复自己:如果我们添加它 当我们想要做出改变时,为每个模板单独设置 例如,要添加另一个样式表)我们必须将它们全部制作出来 文件。为了解决这个问题,我们将为其他人创建一个基本模板 将继承自。
让我们在联系人应用的模板目录中创建base.html。
{% load staticfiles %}
<html>
<head>
<link href="{% static 'bootstrap/css/bootstrap.min.css' %}"
rel="stylesheet" media="screen">
</head>
<body>
{% block content %}
{% endblock %}
<script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
</body>
</html>
base.html定义了我们页面的通用结构,并包含一个 块标记,其他模板可以填写。
我们会更新contact_list.html以从base.html扩展并填写 内容块。
{% extends "base.html" %}
{% block content %}
<h1>Contacts</h1>
<ul>
{% for contact in object_list %}
<li class="contact">{{ contact }}</li>
{% endfor %}
</ul>
<a href="{% url "contacts-new" %}">add contact</a>
{% endblock %}
完全按照这个,我现在有一个base.html,包括我的所有样式引用和导航栏/等,所以block content
中的html只是每个(变化)页面的中心内容。
答案 3 :(得分:-2)