【问题标题】:Url key word argument within CreateViewCreateView 中的 URL 关键字参数
【发布时间】:2017-09-25 12:57:38
【问题描述】:

如何使用get() 或 CreateView 的其他方法获取 URL 关键字参数?我尝试使用self.kwargs['arg_name'],但没有结果。 提前谢谢你。

【问题讨论】:

  • 可能是self.request.GET.get('arg_name') ?
  • 视图的 URL 模式是什么?
  • @Alasdair, url(r'^lot/create/(?P<pk>[0-9]+)/$', views.LotCreate.as_view(), name='lot-create')
  • 那么你想要self.kwargs['pk']。如果这不起作用,那么您需要更详细地解释问题所在——不清楚您所说的“没有结果”是什么意思。
  • @Alasdair, self.kwargs['pk'] 它返回无。

标签: python django


【解决方案1】:

您可以使用以下代码访问视图中的url关键字

方法一

要在基于类的视图中访问 url 参数,请使用 self.argsself.kwargs,这样您就可以通过 self.kwargs['user_id'] 访问它

url(r'^users/(?P<user_id>[0-9]+)/$',
views.your_view_name.as_view()),

在你的views.py中:

class your_class_name(CreateView):
    def view_name(self):
        upk=self.kwargs.get['user_id']
        print user_id
        ...

方法二

如果你像这样在 url 中传递关键字

/your_url?user_id=1

views.py

def view_name(request):
    user_id = request.GET.get('user_id')
    print user_id
    ....

来自Stackoverflow Link的参考

希望对你有帮助

【讨论】:

  • 此解决方案不适合使用类花瓶视图。我正在使用 CreateView 创建对象,我需要在 CreateView 中精确获取 url 关键字参数
  • 又不是那样。通过您的示例,我们在 ListView 中获得了 kwargs(在 ListView 中我成功获得了 kwargs),但我需要在 CreateView 中精确地重复此过程
【解决方案2】:

你是这个意思吗?

class CreateMessageView(LoginRequiredMixin, CreateView):

    def get(self, request, *args, **kwargs):
        ret = super(CreateMessageView, self).get(request, *args, **kwargs)
        upk=self.kwargs['user_id']
        return ret

我已经对其进行了测试...工作... NIKHILS RANE 的答案有些正确。这条线upk=self.kwargs['user_id'] 与他的upk=self.kwargs.get['user_id'] 不同。可能是你的问题

【讨论】:

  • 不,我完全试过self.kwargs['some'],你的例子返回super(CreateMessageView, self).get(request, *args, **kwargs),但是在这种情况下我们如何使用upk?
  • 在你的情况下是self.kwargs['pk']。如果您想使用'some''upk',则必须指定r'^lot/create/(?P&lt;some&gt;[0-9]+)/$'r'^lot/create/(?P&lt;upk&gt;[0-9]+)/$' 这无济于事,我不明白您的问题。如果您想在视图中的其他地方使用 upk,请使用 self.upk=self.kwargs['upk']
  • 是的,我使用self.kwargs['pk'],我已经在 CreateView 的 get() 和 get_context_data() 方法中尝试过,但我得到了相同的结果,self.kwargs['pk'] 没有任何返回。
  • 在 url 模式中,我使用的是 pk 变量名。
  • 我确信我是对的。请启动调试器并检查 get 方法中的变量。你这里有一个愚蠢的错误。
猜你喜欢
  • 2013-10-05
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2021-08-24
相关资源
最近更新 更多