4

我正在尝试从 django 模板中包含一个静态 html 页面。

我尝试使用{% include the_static.html %},但由于某些未知原因这不起作用。

the_static.html 页面是一个数据页面,通常会使用 html 编辑器进行修改。
并且 my_model 有一个指向这个 html 的 url 和include它。但是 django 拒绝找到它,尽管我确定我已经正确设置了路径。

4

4 回答 4

6

您可以编写自定义模板标签来执行此操作。

  1. 创建一个名为includestatic.py. appname/templatetags/另外,请记住创建appname/templatetags/__init__.py,将应用程序包含在设置中并重新启动服务器。

  2. 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)
    
  3. 要在模板中使用它,请将其放在模板{% load includestatic %}的顶部,然后使用{% includestatic "app/file.txt" %}.

于 2015-12-31T11:30:29.910 回答
1

我不确定我是否了解所有内容...

你有一个由 Django 在给定 url 上提供的 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 中?

在第一种情况下,您已经有了 URL,http://mydjangodomain/get_the_static/所以就像使用它一样。

在第 2 种情况下,您不需要以前的 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,
)
于 2013-07-23T09:38:44.007 回答
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,其中包含我所有的样式引用和导航栏/等,因此其中的 htmlblock content只是每个(变化的)页面的中心内容。

于 2016-10-14T13:57:29.797 回答
-2

您的意思是要扩展父模板 the_static.html 吗

如果是,您应该在子模板的第一行添加以下代码:

{% extends "the_static.html" %}

详细文档可以在这里找到

于 2013-07-23T18:46:06.467 回答