在哪里为 Django 中的模板导入东西?

Posted

技术标签:

【中文标题】在哪里为 Django 中的模板导入东西?【英文标题】:Where to import stuff for a template in Django? 【发布时间】:2018-06-16 13:25:14 【问题描述】:

抱歉这个愚蠢的问题,我迷路了。

我得到了一个模板和一个模板标签:

menu_tags.py

from django import template
from menu.models import Button

register = template.Library()

@register.inclusion_tag('menu/home.html')
def show_menu():
    buttons = Button.objects.all()
    return 'buttons': buttons

还有这个:

home.html

    % for button in buttons %
    % if user.is_authenticated %
      stuff
    % endif %
    % endfor %

我想知道,我怎样才能让 user.is_authenticated 工作?我知道我必须导入一些东西,但是在哪里?在 menu_tags 中导入它似乎不起作用。

谢谢!

【问题讨论】:

或者你可以使用request.user.is_authenticated 总是为我返回 false。 用户是否已通过身份验证?用什么方法? 使用基本的 Django 系统...我可以在我的基本模板中使用“user.is_authenticated”,但如果这对您有帮助,则不能在我的菜单应用程序中使用... request 在模板标签中不可用。你必须先得到它。在这里查看答案:Access request in django custom template tags。然后使用request.user.is_authenticatated 【参考方案1】:

根据 cmets 中其他用户的建议,尝试以下操作:

from django import template
from menu.models import Button

register = template.Library()

@register.inclusion_tag('menu/home.html', takes_context=True)
def show_menu():
    request = context['request']
    if request.user.is_authenticated: # if Django 1.10+
        buttons = Button.objects.all()
    else:
        buttons = None
    return 'buttons': buttons

然后在您的模板中,确保您加载了新的模板标签并尝试:

% load menu_tags %

% for button in buttons %
   button 
% endfor %

【讨论】:

以上是关于在哪里为 Django 中的模板导入东西?的主要内容,如果未能解决你的问题,请参考以下文章

Django将对象列表传递给模板

如何重新加载 Django 模板?

传递变量以在 django 模板中显示

django模板的导入

Django框架—— 模板层:模板导入模板继承静态文件

Django auth:在哪里放置自定义模板?