Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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_Django Views_Django Urls - Fatal编程技术网

Python 从重定向向基于类的视图传递参数

Python 从重定向向基于类的视图传递参数,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我有一个基于类的视图(RegistrationView),我希望在重定向时将参数值传递给它,如下所示 # views.py def hook(request): return HttpResponseRedirect(reverse('registration_register', kwargs={'initial': {'email': 'user@example.com'}})) 其中,我的随附URL模式定义为

我有一个基于类的视图(
RegistrationView
),我希望在重定向时将参数值传递给它,如下所示

# views.py
def hook(request):
    return HttpResponseRedirect(reverse('registration_register',
                                    kwargs={'initial': {'email': 'user@example.com'}}))
其中,我的随附URL模式定义为:

# urls.py
urlpatterns = [
    url(r'^account/register/$',
        RegistrationView.as_view(form_class=RegistrationForm), 
        name='registration_register'),
]
并且initial是
注册视图
中的有效参数值

但是,当我运行这个程序时,我遇到了以下错误,因为我没有在url中定义参数(如果可能的话,我不想在url路径中定义参数)

与参数“()”和关键字参数“{'initial':{'email':”相反user@example.com找不到“}}”。已尝试1个模式:[“帐户/注册表/$”]

我遇到了下面讨论将关键字参数传递给基于类的视图的内容,但是,我无法让它与上面的代码一起工作

从概念上讲,我试图实现的功能与下面的功能相当,只是使用了
HttpRedirect
,而不是生成直接的响应

def hook(request):
    return RegistrationView.as_view(
         form_class=RegistrationForm, initial={'email': 'user@example.com'})(request)

有人能告诉我如何用这个初始参数值重定向到我的视图吗?

好吧,就像你说的,你还没有在URL中定义这个参数,所以我不知道你认为反向函数会对它做什么。尽管您说它是RegistrationView的“有效参数”,但很明显,该视图也不希望使用该参数

如果要通过
reverse
传递此数据,则需要编写一个不需要参数的视图,并为其提供一个接受这些参数的URL


另一种方法是使用会话传递此数据。

正如您所说,您尚未在URL中定义该参数,因此我不知道您认为反向函数将如何处理它。尽管您说它是RegistrationView的“有效参数”,但很明显,该视图也不希望使用该参数

如果要通过
reverse
传递此数据,则需要编写一个不需要参数的视图,并为其提供一个接受这些参数的URL


另一种方法可能是使用会话传递此数据。

您混淆了一些事情

使用
args
kwargs
传递到
reverse
的参数用于构建URL。为了让视图接受这些参数,相应的URL模式必须有一个占位符

看看这个例子:

# urls.py
...
url(r'^/polls/(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
...

# views.py
def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

>>> reverse('detail', kwargs={'question_id': 123})
'/polls/123/'
您可以使用
request.GET
访问视图中的查询参数,在本例中为
request.GET.GET('foo')

现在,关于基于类的视图。简单地说,
as_view()
是一个错误的位置,用于传递参数,每个请求的参数应该不同。在引擎盖下,表达式
RegistrationView.as\u view(form\u class=RegistrationForm)
创建一个工厂函数,该函数为每个请求实例化一个新的RegistrationView实例
as\u view()
“存储”它的参数并将它们传递给
RegistrationView。\uu初始化\uuu()

TL;医生:

将电子邮件作为查询参数传递,如登录URL中的参数
next

/account/register/?email=user@example.com
如果您的
RegistrationView
是标准的
FormView
,您可以覆盖
get_initial
以获取参数

def get_initial(self):
    initial = super(RegistrationView, self).get_initial()
    email = self.request.GET.get('email')
    if email is not None:
        initial['email'] = email
    return initial

你把一些事情搞混了

使用
args
kwargs
传递到
reverse
的参数用于构建URL。为了让视图接受这些参数,相应的URL模式必须有一个占位符

看看这个例子:

# urls.py
...
url(r'^/polls/(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
...

# views.py
def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

>>> reverse('detail', kwargs={'question_id': 123})
'/polls/123/'
您可以使用
request.GET
访问视图中的查询参数,在本例中为
request.GET.GET('foo')

现在,关于基于类的视图。简单地说,
as_view()
是一个错误的位置,用于传递参数,每个请求的参数应该不同。在引擎盖下,表达式
RegistrationView.as\u view(form\u class=RegistrationForm)
创建一个工厂函数,该函数为每个请求实例化一个新的RegistrationView实例
as\u view()
“存储”它的参数并将它们传递给
RegistrationView。\uu初始化\uuu()

TL;医生:

将电子邮件作为查询参数传递,如登录URL中的参数
next

/account/register/?email=user@example.com
如果您的
RegistrationView
是标准的
FormView
,您可以覆盖
get_initial
以获取参数

def get_initial(self):
    initial = super(RegistrationView, self).get_initial()
    email = self.request.GET.get('email')
    if email is not None:
        initial['email'] = email
    return initial

卓越-会话执行本例中我需要的操作,因为我不需要通过查询字符串传递电子邮件。卓越-会话执行本例中我需要的操作,因为我不需要通过查询字符串传递电子邮件。