标题表示我试图在每个页面上发送当前用户创建的类别用户的名称。我最初的尝试只是
{% if user.is_authenticated == category.author %}
{{category.name}}
{% endif %}
但是这只显示某个页面中的类别,而我想在导航栏中显示它,我将它包含在每个页面中。所以我认为我应该在我的用户模型中做category = models.foreignkey('category')
但是告诉我应该在模板上下文处理器中设置一个查询集。我不确定这是最好的方法。
有人可以指导我如何做这件事吗?
这是我的代码
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
description = models.TextField()
author = models.ForeignKey(settings.AUTH_USER_MODEL)
和我的views.py
@login_required
def add_category(request):
if not request.user.is_superuser and Category.objects.filter(author=request.user).exists():
return render(request,'main/category_already_exists.html')
if request.method == 'POST':
category = Category(author=request.user)
form = CategoryForm(request.POST, request.FILES, instance=category)
if form.is_valid():
form.save(commit=True)
return redirect('category', category_name_url=category.name)
else:
form = CategoryForm()
context = {
"form":form
}
return render(request, 'main/add_category.html',context)
这是我的简化类别视图
def category(request, category_name_url):
category_name = decode_url(category_name_url)
category = Category.objects.get(name=category_name)
context = {
"category":category,
}
return render(request, "main/category.html", context)
这是我的用户模型 来自userena.models导入UserenaBaseProfile
class MyProfile(UserenaBaseProfile):
user = models.OneToOneField(User, unique=True, verbose_name=_('user'), related_name='my_profile')
答案 0 :(得分:2)
也许您应该编写自己的上下文处理器并将其包含在设置中。链接到文档https://docs.djangoproject.com/en/dev/ref/templates/api/#context-processors
Django docs的定义:
“上下文处理器是接收当前HttpRequest作为参数的函数,并返回要添加到呈现上下文的数据的字典。
它们的主要用途是将所有模板共享的公共数据添加到上下文中,而不必在每个视图中重复代码。“
答案 1 :(得分:1)
您可以在request.session
中添加此信息。你可以这样做:
假设您的登录视图是:
def login(request):
# Do login stuff
if user.is_active():
request.session['categories'] = [ c.name for c in Category.objects.filter(author=request.user)] # add to the session
return redirect('/somepage')
在每个页面中显示此数据,如下所示:
{% for c in request.session.categories %}
{{ c }}
{% endfor %}
每次添加新类别时都会更新类别列表:
@login_required
def add_category(request):
if not request.user.is_superuser and Category.objects.filter(author=request.user).exists():
return render(request,'main/category_already_exists.html')
if request.method == 'POST':
category = Category(author=request.user)
form = CategoryForm(request.POST, request.FILES, instance=category)
if form.is_valid():
form.save(commit=True)
request.session['categories'] = [ c.name for c in Category.objects.filter(author=request.user)]
return redirect('category', category_name_url=category.name)
else:
form = CategoryForm()
context = {
"form":form
}
return render(request, 'main/add_category.html',context)