在django模板中从请求中调用信息

时间:2013-09-06 02:41:36

标签: django django-templates

我有一个使用身份验证的django应用程序,用户可以查看彼此的个人资料。

在我的views.py

def display(request, edit=False, pk=None): 
    if not pk:
        pk = request.user.profile.pk

    profile = Profile.objects.get(pk=pk)
    d = get_user_info(profile) # returns a dictionary of some info from a user's profile

    if edit and request.user == profile.user:
        return render(request, 'edit_profile.html', d)
    else:
        return render(request, 'profile.html', d)

在我的模板中,我想为用户提供点击链接的选项,允许他们在查看自己的个人资料时编辑信息。

{% if request.user == profile.user %}
    <a href="{% url "edit_profile" %}">edit</a>
{% endif %}

我有两个问题。
第一:我认为使用render()允许我访问模板内的request。但是,这不起作用。我做错了吗?或者我是否需要使用字典显式传递render

d['request']=request    
return render(request, 'profile.html', d) 

第二:这可以吗?或者我应该以其他方式这样做吗?

1 个答案:

答案 0 :(得分:3)

Django有一个request context processor,可以在模板上下文中添加request个对象。 默认情况下不会添加此项,因此您需要在TEMPLATE_CONTEXT_PROCESSORS设置中启用它。

但是,django将当前request.user添加为user上下文变量,因此如果这足够,您可以使用它。