我有用于查看有关特定用户的所有信息的网址:
blog/urls.py(我使用'urlpatterns +='来给出一段urlpatterns列表,它不在我的文件中)
urlpatterns += path('user/<int:pk>/', UserDetailView.as_view(), name='user-detail'),
使用此 UserDetailView 视图:
博客/views.py
class UserDetailView(DetailView):
model = User
template_name = 'blog/user_detail.html'
继承自DetailView并使用Django的User模型。
我在基本 html 文件中有导航栏,显示当前用户昵称,并附有其页面的链接:
base.html(所有其他 html 文件继承自)
{% if user.is_authenticated %}
<a class="nav-item nav-link" href="{% url 'post-create' %}">New Post</a>
<a class="nav-item nav-link" href="{% url 'user-detail' user.id %}">{{ user.username }}</a>
<a class="nav-item nav-link" href="{% url 'logout-page' %}">Logout</a>
现在,当我登录并查看除
'user/<int:pk>/'
之外的任何页面时,带有链接的昵称会按预期显示,但是当我查看某个特定用户的页面时, {{ user ]} 从当前用户更改为用户页面我正在看:图像。
带有 Post 模型的 ListView 通过昵称调用 User 不会影响当前用户:
博客/urls.py
urlpatterns += path('user/<str:username>', UserPostListView.as_view(), name='user-posts')
博客/views.py
class UserPostListView(ListView):
model = Post
template_name = 'blog/user_posts.html' # <app>/<model>_<viewtype>.html # blog/post_list.html
context_object_name = 'posts'
paginate_by = 2
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Post.objects.filter(author=user).order_by('-date_posted')
如果规范不够,这里是 git
有没有办法阻止带有 User 模型的 DetailView 将 {{ user }} 从当前用户更改为我正在查看的页面?
有没有办法阻止
用户模型将 {{ user }} 从当前用户更改为我正在查看的页面?DetailView
发生这种情况的原因是因为 Django 在模板中将对象注入为
object
,同时也作为 .get_context_object_name(…)
[Django-doc] 的结果,默认情况下是模型的名称小写,所以在这种情况下 user
但是我们可以通过
{{ request.user }}
来获取登录用户:
{{ request.user }} # 🖘 logged-in user
{{ user }} # 🖘 object of the DetailView
{{ object }} # 🖘 object of the DetailView
另一个选项是指定不同的
context_object_name
,例如:
class UserDetailView(DetailView):
model = User
template_name = 'blog/user_detail.html'
context_object_name = 'the_user'
然后我们合作:
{{ request.user }} # 🖘 logged-in user
{{ user }} # 🖘 logged-in user
{{ the_user }} # 🖘 object of the DetailView
{{ object }} # 🖘 object of the DetailView
[Django-doc] 来引用用户模型比使用settings.AUTH_USER_MODEL
模型 [Django- doc]直接。有关更多信息,您可以参阅文档的引用
User
模型部分[Django-doc]。
User