Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重定向函数的首选参数_Python_Django - Fatal编程技术网

Python 重定向函数的首选参数

Python 重定向函数的首选参数,python,django,Python,Django,最近我决定,当用户创建类别页面时,再重定向到创建的类别页面。事情是这样的,为此我不使用SLUG或ID。我使用它, CythyyNox= CuffEdURL(CyryPyNAMEYURL)< /> >代码>返回重定向(“类别”,空白)< /代码>强>什么应该是空白?< /强> 我尝试了category\u name和category\u name\u url,但两者都不起作用。我应该在那里放什么 这是我的密码 def category(request, category_name_url):

最近我决定,当用户创建类别页面时,再重定向到创建的类别页面。事情是这样的,为此我不使用SLUG或ID。我使用它,<代码> CythyyNox= CuffEdURL(CyryPyNAMEYURL)< /> >代码>返回重定向(“类别”,空白)< /代码>强>什么应该是空白?< /强>

我尝试了category\u name和category\u name\u 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”