Django';ASP.NET用户控件的s等价性

Django';ASP.NET用户控件的s等价性,django,django-templates,django-views,Django,Django Templates,Django Views,如果这里有人是ASP.NET pro,你可能知道我所说的用户控制是什么意思。我希望在django中创建一个类似的 所以,我的问题是,我的网站有几个页面,但我需要一个搜索栏出现在每个页面。因为我需要views.py来操作这个搜索栏,所以我无法使用简单的 {% include 'something.html' %} 因此,有人能建议我怎么做吗?有两种方法可以完成你想要做的事情: 上下文处理器可以使用值扩充模板上下文,而不管加载了哪个模板。它们类似于Rails中的过滤器 模板标记与上下文处理器一

如果这里有人是ASP.NET pro,你可能知道我所说的用户控制是什么意思。我希望在django中创建一个类似的

所以,我的问题是,我的网站有几个页面,但我需要一个搜索栏出现在每个页面。因为我需要views.py来操作这个搜索栏,所以我无法使用简单的

{% include 'something.html' %}

因此,有人能建议我怎么做吗?

有两种方法可以完成你想要做的事情:

上下文处理器可以使用值扩充模板上下文,而不管加载了哪个模板。它们类似于Rails中的过滤器

模板标记与上下文处理器一样,可以完成Python中可以完成的任何事情,但都是在模板级别实现的

如果您需要在每个模板上都显示一些内容,实现这一点的最简单方法之一是使用包含标记,它还可以接受传递给它的值。包含标记可以在最高级别的模板(即母版页)上实现,只要不将其放入块中并覆盖它,它就会出现在继承链中包含该模板的每个页面上

如果只是希望在每个页面上包含一些内容,并且不需要进行任何处理,那么您应该能够将所需的代码放在最上面的模板中,并让后续模板继承这些内容


我通常有一个“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 }}
    
    @register.filter
    def get_log_uc(list_log):
        template = loader.get_template('user_control_log.html')
        context = { 'list_log' : log }
        return template.render(context)
    
  • 在filters.py中,我加载另一个带有此自定义筛选器的html文件

    {{ list_log|get_log_uc|safe }}
    
    @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\u control\u log.html中,我使用了与用户控件等效的html

    {% for log in list_log %}
       <p>log.something</p>
    {% endfor %
    
    {%用于登录列表\u log%}
    日志什么的

    {%endfor%

  • 如果我只需要获取一个查询集,该怎么办?我正在这样做:tagstring=[definition.encode(“utf8”),用于标记定义。对象。值列表('title',flat=True)。order_by('title')]我只需要把它放在模板上,我对django很陌生。你能给我举个例子吗?对于这个用例,我会使用一个包含标记。这样你就可以执行查询集并将它交给部分模板,然后在调用的模板中呈现。