【发布时间】:2011-02-03 21:02:32
【问题描述】:
罐头上写着什么:我希望能够访问:
- 视图函数本身
- 视图名称(虽然这不太有用,但我可能可以使用它来返回函数)
- 视图函数的属性
这需要从模板标签中访问。
简而言之,我要做的是用我的基本模板可以用来配置一些视图框架 UI 的信息来标记视图函数;例如,设置标题或填充通用帮助对象。如果有人可以提出更好的方法来做到这一点,请随时提供该答案。
【问题讨论】:
标签: python django django-templates
罐头上写着什么:我希望能够访问:
这需要从模板标签中访问。
简而言之,我要做的是用我的基本模板可以用来配置一些视图框架 UI 的信息来标记视图函数;例如,设置标题或填充通用帮助对象。如果有人可以提出更好的方法来做到这一点,请随时提供该答案。
【问题讨论】:
标签: python django django-templates
是的,在第一次实现 Django 时,您有时必须改变您对设计的看法,特别是如果您来自像 PHP、ColdFusion 或其他许多功能都来自于基于标签的语言这样的语言在模板中。
简而言之:不要尝试在 django 模板中实现任何复杂的编程逻辑。 if/then/else 和循环几乎是您应该尝试直接在模板中执行的复杂程度。
基本上有 3 种方法可以在模板中以编程方式生成输出:
context)发送它们。一个简单(尽管区别较小)的选项是发送locals(),它将发送函数中创建的每个变量(以及参数)。Author 模型创建了函数 most_recent_posts,则可以使用类似 {% for post in author.most_recent_posts %}
出于您的目的,例如在页面上创建“帮助对象”,您可能对称为inclusion tag 的特殊自定义标签感兴趣。您将其称为普通自定义标签:{% show_help obj %},然后创建一个模板,用于输出该对象的数据。例如,假设您想实现一个上下文相关的帮助系统,并且您只是希望它从数据库中提取帮助对象并输出它们。你会这样创建一个标签:
from help.models import Help
@register.inclusion_tag('/help/help.html')
def show_help(topic):
help = Help.objects.get(topic__iexact=topic)
return {
'help': help
}
然后你就有了一个输出帮助内容的模板:
# /help/templates/help/help.html
<div class="help-widget">
<h2>{{ help.title }}</h2>
<p>{{ help.content }}</p>
</div>
在您的模板中,您将调用包含标记:
<form><fieldset>Delete Project</fieldset>
...
{% show_help "Deleting Project" %}
</form>
【讨论】:
{% block help %}{% endblock help %}。然后将该块放入每个模板中。由于每个视图的模板(我希望!)都不同,因此您可以指定哪些帮助内容应直接显示在该块中。
这就是模板上下文字典所包含的内容。它应该包含“例如标题或填充通用帮助对象。”
def myViewFunction( request ):
# whatever
return render_to_response( template,
{ 'title': "Title of this view's page",
'help': someHelpObject, },
'name': 'myViewFunction',
'attribute': 'some attribute of myViewFunction',
)
【讨论】:
视图函数在 Django 中没有任何特殊状态。
模板可以在任何地方呈现:在视图中、在模板标签内、在模型方法中、在实用程序函数中......所以甚至不清楚您想要访问什么。但无论如何,一般原则是,如果您想访问模板中的某些内容,则应将其传递到模板上下文中。
【讨论】:
如果你需要传递一些每次都重复的上下文,并且每次编写视图时都要在视图的上下文中提及。
可以通过使用 context_processors 以更好的方式完成。此链接将为您提供其余所需信息。如有任何疑问,请随时交流。
【讨论】: