【问题标题】:Can I raise Http404 in a Django template tag?我可以在 Django 模板标签中引发 Http404 吗?
【发布时间】:2010-07-01 11:14:20
【问题描述】:

我有一个提供模板标签profile 的Django 应用程序。该标签接受用户名作为其参数。当不存在具有给定用户名的User 实例时,我应该如何处理这种情况?在模板标签内引发 HTTP 404 是否有意义?还是我应该简单地将一个空字典传递给模板?

【问题讨论】:

    标签: django http-status-code-404 templatetags


    【解决方案1】:

    我认为不可能从模板中引发 404,如果可以的话,你不应该这样做。您应该将逻辑和表示分开。

    你有两种声音的可能性。

    • 不要用你的模板标签渲染任何东西(静默失败)
    • 引发模板错误。

    您并没有确切说明您的模板标签在做什么,所以我不能推荐两者中的任何一个,但是对于模板标签,最正常的做法是静默失败。

    【讨论】:

      【解决方案2】:

      如果页面是用户特定的,您应该在呈现该页面之前让用户到@login_required,以便您知道该用户存在。

      否则,按照惯例,您应该在模板标签中静默失败。

      【讨论】:

        【解决方案3】:

        您应该做的是在显示profile 标记之前检查您的模板中是否存在user 变量。

        【讨论】:

          【解决方案4】:

          我可以看到两种方式:

          使用 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')
          

          【讨论】:

            猜你喜欢
            • 2021-07-05
            • 1970-01-01
            • 2011-02-12
            • 2011-02-06
            • 1970-01-01
            • 1970-01-01
            • 2011-05-02
            • 2013-06-14
            • 2023-03-10
            相关资源
            最近更新 更多