Python 重定向函数的首选参数
最近我决定,当用户创建类别页面时,再重定向到创建的类别页面。事情是这样的,为此我不使用SLUG或ID。我使用它,<代码> CythyyNox= CuffEdURL(CyryPyNAMEYURL)< /> >代码>返回重定向(“类别”,空白)< /代码>强>什么应该是空白?< /强> 我尝试了category\u name和category\u name\u url,但两者都不起作用。我应该在那里放什么 这是我的密码Python 重定向函数的首选参数,python,django,Python,Django,最近我决定,当用户创建类别页面时,再重定向到创建的类别页面。事情是这样的,为此我不使用SLUG或ID。我使用它, CythyyNox= CuffEdURL(CyryPyNAMEYURL)< /> >代码>返回重定向(“类别”,空白)< /代码>强>什么应该是空白?< /强> 我尝试了category\u name和category\u name\u url,但两者都不起作用。我应该在那里放什么 这是我的密码 def category(request, 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})
url.py
url(r'^category/(?P<category_name_url>\w+)/$', views.category, name='category'),
url(r'^category/(?P\w+/$),views.category,name='category'),
通过我的尝试,我得到add_category()正好接受2个参数(给定1个)重定向使用反向。您有一个命名的参数,因此反过来是:
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,因此您必须传递一个显式字典。当您使用重定向时,一个显式命名参数。什么是category\u name\u url
?您的add_category
视图的第一行仍然会出现错误,因为该变量未定义。@Selcuk它是参数,但我get add_category()只接受2个参数(给定1个),在编辑问题之前,该参数不存在。试试返回重定向('category',args=[category\u name])
@Selcuk是的,我刚看到我的代码有多蠢就编辑了。它还是有点傻tho@Selcuk它说add_category()只接受2个参数(给定1个),我不明白,因为我在使用category\u name\u url以及category\u name。你好,你能帮我解决这个问题吗?我试过了,但不起作用…你试过什么,什么不起作用?谢谢你的回答,我会用我试过的内容编辑问题这是我做的我得到了“Category”对象没有属性“Category\u name”