首页 > 解决方案 > 比较 django 中的 url

问题描述

当用户访问他自己的个人资料时,我试图隐藏内容。我尝试了下面的代码,但没有成功。有什么问题。

 {% if request.path == "/account/users/{{ request.user.username }}/" %}

  {% else %}

<img src="https://tyllplus.com/static/arrow-orange-down-vector-1.png" width="30" height="30">
{% endif %}

标签: pythonhtmldjango

解决方案


(高级)字符串处理不应在模板中进行。特别是不使用 URL,因为您以后可能想要更改视图。即使你设法让它工作,如果你以后有一个前缀路径,它也可能开始失败。此方法还很大程度上取决于 URL 的格式:如果您稍后指定一个使用id代替 的URL username,那么您将需要查找所有依赖此格式的 URL 处理。这不是优雅的设计。

当然简单的处理是没有问题的。例如,将逗号分隔符添加到数字等通常由模板标签处理。但在我看来,URL 并不真正适合该类别。

您最好在视图中编码此逻辑(或确保您可以使用视图中的元素轻松检测到它)。

例如DetailView

from django.views.generic.detail import DetailView

from django.contrib.auth.models import User

class UserDetailView(DetailView):
    model = User
    context_object_name = 'my_user'
    template = 'user_detail.html'

我们知道该my_user变量会携带User显示的对象,那么我们可以通过以下方式进行验证:

{% if my_user != request.user %}
<!-- show something -->
{% else %}
<!-- show something else -->
{% endif %}

推荐阅读