最近我决定当用户创建类别页面然后重定向到创建的类别页面。事情是,为此,我没有使用slu or或id。我使用category_name = decode_url(category_name_url)
作为return redirect('category', blank)
应该是什么空白?
我尝试了category_name和category_name_url,但两者都不起作用。我该放什么?
这是我的代码
def category(request, category_name_url):
user = User.objects.get(username=request.user)
category_name = decode_url(category_name_url)
more in the below....
@login_required
def add_category(request, category_name_url):
category_name = decode_url(category_name_url)
category = Category.objects.get(name=category_name)
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)
else:
form = CategoryForm()
return render(request, 'main/add_category.html', {'form':form})
urls.py
url(r'^category/(?P<category_name_url>\w+)/$', views.category, name='category'),
根据我的尝试,我得到add_category()只需要2个参数(给定1个)
答案 0 :(得分:2)
重定向使用反向。你有一个命名参数,反之如下:
reverse("category",kwargs={'category_name_url':category_name})
重定向:
return redirect("category",category_name_url=category_name)
在该功能中,您必须获取类别名称:
...
if request.method == 'POST':
category = Category(author=request.user)
form = CategoryForm(request.POST, request.FILES, instance=category)
if form.is_valid():
category = form.save(commit=True)
return redirect("category",category_name_url=category.category_name)
Django实际上允许您使用任何字段定义对象URL,而不仅仅是slug或id。因此,您可以将以下方法添加到模型中:
from django.core.urlresolvers import reverse
...
def get_absolute_url(self):
return redirect(reverse('category',kwargs={'category_name_url':self.category_name})
然后,以你的形式:
return redirect(category)
注意:reverse
接受kwargs,而不接受** kwargs,因此您必须传递显式字典。使用重定向时,显式命名参数。