如果这里有人是 ASP.NET 专业人士,您可能知道我所说的用户控制是什么意思。我希望在 django 中创建一个类似的。
所以,我的问题是我的网站上有几个页面,但我需要一个搜索栏出现在每个页面中。由于我需要views.py来操作这个搜索栏,我不能做一个简单的方法
{% include 'something.html' %}
因此,任何人都可以建议我该怎么做?
如果这里有人是 ASP.NET 专业人士,您可能知道我所说的用户控制是什么意思。我希望在 django 中创建一个类似的。
所以,我的问题是我的网站上有几个页面,但我需要一个搜索栏出现在每个页面中。由于我需要views.py来操作这个搜索栏,我不能做一个简单的方法
{% include 'something.html' %}
因此,任何人都可以建议我该怎么做?
有几种方法可以完成您想要做的事情:
无论加载哪个模板,上下文处理器都可以用值扩充模板上下文。它们类似于 Rails 中的过滤器。
模板标签,如上下文处理器,可以完成你在 Python 中可以做的任何事情,但是是在模板级别实现的。
如果您需要在每个模板上显示某些内容,实现此目的的最简单方法之一是使用包含标记,该标记也可以接受传递给它的值。包含标记可以在您的最高级别模板(即 MasterPage)中实现,只要您不将其放入块中并覆盖它,它就会出现在其继承链中包含该模板的每个页面上。
如果它只是你想在每个页面上包含的东西,并且不需要做任何处理,你应该能够将你想要的代码放在最顶层的模板中,并让后续模板继承它。
我通常有一个“base.html”模板,我的所有模板都继承自该模板。如果我需要在每一页中都有一些东西,我就把它放在那里。如果默认情况下我想要它,但希望能够在后续模板中增加它,我会将它放入一个块中。该块将允许您包含或覆盖其默认内容。
我知道这篇文章有点老了,但我只是偶然发现它并找到了一种可行的解决方案。我称之为一种解决方案,因为它是一种解决方法。
我有几个不同的站点,我想在这些站点上显示日志记录信息。此显示始终看起来相同(它具有相同的 html),并且在其后面具有相同的数据库表和模型类。
我的解决方案/解决方法使用 django 过滤器:
在views.py中,我将日志条目列表放在上下文中
context = {'list_log': Log.objects.filter(condition = True) }
template = loader.get_template('my_html_file.html')
return HttpResponse(template.render(context, request))
在 my_html_file.html 我使用自定义过滤器
{{ list_log|get_log_uc|safe }}
在 filters.py 我用这个自定义过滤器加载另一个 html 文件
@register.filter
def get_log_uc(list_log):
template = loader.get_template('user_control_log.html')
context = { 'list_log' : log }
return template.render(context)
在 user_control_log.html 我有用户控制等效 html
{% for log in list_log %}
<p>log.something</p>
{% endfor %