【问题标题】:Django: Accessing kwargs using HttpResponseRedirect(reverse()) in passed viewDjango:在传递的视图中使用 HttpResponseRedirect(reverse()) 访问 kwargs
【发布时间】:2018-03-22 15:12:45
【问题描述】:

我正在尝试在成功视图中访问通过 HttpResponseRedirect() 传递的 kwargs。密钥存在于 kwarg 字典中,但值不存在。这是为什么呢?

观看次数:

class UploadView(View):

    paneluploadform = PanelUploadForm

    def get(self, request, *args, **kwargs):

        paneluploadform = self.paneluploadform()
        context = {'paneluploadform': paneluploadform}
        return render(request, 'results/upload.html', context)


    def post(self, request, *args, **kwargs):

        paneluploadform = self.paneluploadform(request.POST, request.FILES)

        if paneluploadform.is_valid():
            panel_name = paneluploadform.upload()
            return HttpResponseRedirect(
                    reverse('results:success',
                    kwargs={'panel_name': panel_name})
                )


        context = {'paneluploadform': paneluploadform}
        return render(request, 'results/upload.html', context)


def success(request, *args, **kwargs):

    return render(request, 'results/success.html')

urls.py:

urlpatterns = [
    url(r'^upload/$', UploadView.as_view(), name='upload'),
    url(r'^upload/successful-(?P<panel_name>)', success, name='success')
]

在我的success.py 视图中,当我print(kwargs) 时,输出为{'panel_name': ''}

但我的网址是 /localhost/upload/successful-panelnameientered

为什么不kwargs ={'panel_name': 'panelnameientered'}

【问题讨论】:

    标签: python django python-3.x url httpresponse


    【解决方案1】:

    我不完全确定,但我认为你应该使用re_path,而且你没有设置模式来匹配successful- 之后的内容。所以应该是这样的:

    re_path(r'^upload/successful-(?P<panel_name>[a-z]+)', success)
    

    【讨论】:

    • re_pathurl 的别名(反之亦然),但您对模式本身的看法是正确的。
    • 重定向适用于 url/re_path,但 kwargs 中仍然没有我的 panel_name?如果 (?P) 将面板名称插入到我的网址中,为什么我还需要在网址中添加 [a-z]+?
    • 感谢@DanielRoseman 的声明。我会说因为在你的例子中panel_name 匹配一个空的正则表达式(''),但是如果你设置[a-z]+,那么它将在successful- 之后得到所有内容
    • 好的,谢谢!但是为什么 panel_name 不在我的成功视图中的 kwargs 中?
    • 据我所知panel_name 在那里,但不是空的吗?使用新的正则表达式,它应该具有正确的值。
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 2017-11-25
    • 2014-05-31
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多