当前位置: 首页 > 知识库问答 >
问题:

自定义模板标记Queryset未返回任何内容

奚瑾瑜
2023-03-14

我正在尝试实现一个功能,显示最近创建的5个事件。我决定用Django自定义模板标记实现这一点(如果这不是最好的方法,请告诉我)。到目前为止我所掌握的是:

{% extends 'base.html' %}
{% load eventSearch_extras %}
<p>count: {{ recents.count }}</p>
<ul>
{% for e in recents %}
    <li> {{e.title}} </li>
{% empty %}
    <li> No recent events </li>
{% endfor %}
</ul>

在eventsearch_extra.py中:

from django import template
from eventSearch.models import Event

register = template.Library()

@register.inclusion_tag('eventSearch/event_search.html')
def mostrecentevents():
    """Returns most 5 most recent events"""
    recents = Event.objects.order_by('-created_time')[:5]
    return {'recents': recents}

这里我的问题是,queryset“recents”似乎返回到模板中为空。“count:”不显示任何内容&for循环默认值为“no recent events”。

共有1个答案

吕胤
2023-03-14

您已经加载了包含标记函数,但没有加载单个标记,因此不会调用填充该信息的代码;它的布局也有点奇怪,所以你打错地方了。

主模板通过使用以下方法调用包含标记:

{% load eventSearch_extras %}

并通过调用

{{mostrecentevents}} 
{% load restaurant_menu %}  <!--main inclusion tag .py file) --> 
{% menu %}  <!-- the actual tag code you want to run --> 

在restaurant_menu.py中,我有以下内容(删除了其他不相关的内容):

@register.inclusion_tag('core/_menu.html', takes_context=True)
def menu(context):
    filtered =  context['filtered']
    from core.models import MenuItem, FoodProfile, Ingredient, Recipe
    if filtered:
        restaurant = context['restaurant'].id
        filtered_menu = #stuff here 
        restaurant_menu = filtered_menu
    else:
        restaurant_menu = MenuItem.objects.filter(restaurant__pk=context['restaurant'].id)
    return {"restaurant_menu": restaurant_menu,
            "number_of_menu_items": restaurant_menu.count(),
            "filtered": filtered}

和_menu.html页面(下划线,所以我知道它是一个片段):

<ul>
    {% for item in course.list %}
        <li>
{{ item.number|floatformat:0 }}  {{ item.name }} {{ item.description }} {{ item.price  }} </li>
</li>{% endfor %}
{% endfor %}
</ul>
 类似资料:
  • 我是thymeleaf的新手,我正试图创建一个web组件。我想要的是这样的东西: 向路易斯问好

  • mytag|自定义宏标记: 标签名称:mytag 功能说明:用于获取自定义宏标记的内容 适用范围:全局使用 基本语法: {dede:mytag typeid='0' name=''/} 参数说明: name = ’’ 标记名称,该项是必须的属性,以下 2、3是可选属性; ismake = ’yes|no’ 默认是 no 表示设定的纯HTML代码, yes 表示含板块标记的代码; typeid =

  • 导出为HTML会生成以下内容: 报告在页面上居中,但应左对齐。 使用JRHtmlExporter的HTML\u HEADER参数看起来很有希望,但这些类已被弃用。这就是解决方案: 现在我必须使用网络。旧金山。jasperreports。出口HtmlExporter和net。旧金山。jasperreports。出口SimpleHtmlReportConfiguration类,如下所示: 您将如何修复

  • 我正在创建一个自定义JSP标记,以从数据对象生成表。为了使代码更简洁,我想为行创建一个单独的标记文件,但我似乎无法在我的主自定义标记中包含自定义标记(抱歉,我知道这很混乱)。 例如我有: 桌子标签: 一行标签 注意第一个文件中的导入(<代码> 我试图将导入更改为<代码> 我做错了什么?

  • 问题内容: 因此,当我打开灯箱时,我试图禁止在页面上滚动,而我发现这个确实有用的脚本非常有用。不幸的是,当我在自己的页面上使用它时,它也禁止在灯箱中滚动。我开始用警报调试代码,只是发现该事件。wheelDelta在我的页面上返回“undefined”,而在JSFiddle中,它返回-120。 问题答案: jQuery事件处理程序中的对象不能反映真实事件。是IE和Opera的非标准事件属性,可通过j

  • 从MinDoc v0.13及以上版本开始支持自定义模板(仅Markdown编辑器)。 创建自定义模板 用户可在编辑项目时将编辑器内的内容报错为模板: 点击保存按钮右侧的公文包按钮会弹出保存为模板的界面: 填写模板名称点击立即保存即可。 全局模板是指,在其他项目中可用,目前仅支持管理员保存全局模板,非管理员及时选中了全局,保存时也是仅项目内可用。 使用自定义模板 点击编辑器上的模板按钮可以显示选择模