【发布时间】:2010-07-01 11:14:20
【问题描述】:
我有一个提供模板标签profile 的Django 应用程序。该标签接受用户名作为其参数。当不存在具有给定用户名的User 实例时,我应该如何处理这种情况?在模板标签内引发 HTTP 404 是否有意义?还是我应该简单地将一个空字典传递给模板?
【问题讨论】:
标签: django http-status-code-404 templatetags
我有一个提供模板标签profile 的Django 应用程序。该标签接受用户名作为其参数。当不存在具有给定用户名的User 实例时,我应该如何处理这种情况?在模板标签内引发 HTTP 404 是否有意义?还是我应该简单地将一个空字典传递给模板?
【问题讨论】:
标签: django http-status-code-404 templatetags
我认为不可能从模板中引发 404,如果可以的话,你不应该这样做。您应该将逻辑和表示分开。
你有两种声音的可能性。
您并没有确切说明您的模板标签在做什么,所以我不能推荐两者中的任何一个,但是对于模板标签,最正常的做法是静默失败。
【讨论】:
如果页面是用户特定的,您应该在呈现该页面之前让用户到@login_required,以便您知道该用户存在。
否则,按照惯例,您应该在模板标签中静默失败。
【讨论】:
您应该做的是在显示profile 标记之前检查您的模板中是否存在user 变量。
【讨论】:
我可以看到两种方式:
使用 if 语句和 javascript 代码进行重定向,例如
{% if profile_not_exist %}
Javascript with redirect
{% else %}
Generic code
{% endif %}
或者在视图中定义逻辑(更好的方式),比如
def index(request):
if(profile_not_exist):
indexTemplate = loader.get_template('404.html')
else:
indexTemplate = loader.get_template('index.html')
【讨论】: