更改扩展django中的页面

时间:2011-01-24 11:19:15

标签: django django-models django-templates django-views

我们可以将页面名称传递给django

中的extends标记

即,我想做类似

的事情

修改

 if(login):

     return render_to_response('/p_change/',

context_instance = RequestContext的(请求,{ '页': 'newpage.html'}))

else:
    return render_to_response('/p_h/',

context_instance = RequestContext的(请求,{ '页': 'newpage1.html'}))

 {% extends page %}

2 个答案:

答案 0 :(得分:4)

可以将变量传递给extends。来自django book

  

在大多数情况下,{%的论点   extends%}将是一个字符串,但它   如果不这样做,也可以是一个变量   知道父模板的名称   直到运行时这可以让你做一些   很酷,很有活力的东西。

但请注意,有一点需要注意!

  

如果您在a中使用{%extends%}   模板,它必须是第一个   该模板中的模板标记。   否则,模板继承不会   工作

这意味着您必须将页面选择逻辑放在您的视图中(而不是在模板中,因为它将出现在extend标记之前,从而使模板继承无效)并在您的上下文中传入变量。有关详细信息,请参阅this answer

更新

在您更新的问题中,您的代码几乎就在那里,除了render_to_response的第一个参数应该是模板文件名,而不是目录。

我会改写你所拥有的:

if login: 
    sub_page = '/p_change/newpage.html'
else:
    sub_page = '/p_h/newpage1.html'

# 'base.html' being the base template containing {% extends page %}
return render_to_response('base.html', context_instance=RequestContext(request, {
    'page' : sub_page,
}))

当然,我只是在猜测你想要达到的目标,可能会被误解。

答案 1 :(得分:0)

您可以将变量传递给extends,如果这就是您所要求的。

{% extends page %}