python - 比较 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 %}
解决方案
(高级)字符串处理不应在模板中进行。特别是不使用 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 %}
推荐阅读
- java - 如何在android中每5秒在后台无限运行特定方法?
- django - Django没有设置相同的站点cookie
- python-3.x - 如果我有细胞的坐标,如何找到 voronoi 细胞的种子?
- java - 未知错误:未处理的检查器错误:{"code":-32000,"message":"Cannot take screenshot with 0 width."}
- python - 机器人消息删除反应
- ruby-on-rails - 如何将sidekiq作业延迟10分钟,最后计算它们?
- python - Python:递归函数的奇怪结果
- python - 如何更改代码中的 for 循环以在我的数据框中为我提供额外的列?
- java - Java spring boot JPA DLL-auto:有选择地更新
- spring - spring-cloud-starter-sleuth + axon-tracing-spring-boot-starter =?