包含来自django模板的静态文件

时间:2013-07-23 09:03:44

标签: django templates static

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

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

the_static.html页面是一个经常使用html编辑器修改的数据页面 my_model有一个这个html的URL和include它。但是django拒绝找到它,虽然我确信我已经正确设置了路径。

4 个答案:

答案 0 :(得分:6)

您可以编写custom template tag来执行此操作。

  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" %}等标记。

答案 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)

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

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

{% extends "the_static.html" %}

可以找到详细信息文档here