【问题标题】:any direct method to Access dynamic url in post method在 post 方法中访问动态 url 的任何直接方法
【发布时间】:2020-03-17 10:07:11
【问题描述】:

在views.py中

class ProcessMessage(TemplateView):
     template_name = 'chat/chat.html'

    def get_object(self):
        id=self.kwargs.get('pk')
        obj=None
        if id is not None:
            obj= User.objects.get(pk=id)

        return obj

    def get(self, request, pk=None,*args, **kwargs):

        obj=self.get_object()
        print(obj,pk)
        super(ProcessMessage, self).get(request, *args, **kwargs)
        return render(request, self.template_name, {'form': ChatForm()})

   def post(self, request, pk=None,*args, **kwargs):
        obj=self.get_object()
        pk=pk
        print(pk)
        print('obj is',obj)
        form = ChatForm(data=request.POST)

        # log = logging.basicConfig(level=logging.DEBUG)

        # print('post from index')
        if form.is_valid():
         //////something////

在 urls.py 中

app_name = 'chatbot'
urlpatterns = [
    path('demo', views.ProcessMessage.as_view(), name='index'),
    path('<uuid:pk>/demo', views.ProcessMessage.as_view(), name='index'),
]

我在 get 方法中获取 obj 和 pk 的值,但我也希望在 post 方法中获取这些值(当前获取值无)

我需要在 def Post 方法中从 URL 中获取 id/pk 来获取用户信息(不,我不想使用 request.user)

【问题讨论】:

  • request.POST.get('pk') 但显然你需要一些东西(表单/JS)在 POST 请求中发送 PK
  • 我也有同样的想法,但如果可能的话,我希望有一些直接的方法
  • self.kwargs.get('pk') 应该以相同的方式处理 GET 和 POST 请求。请出示您的模板。
  • @Alasdair 我试过了,显示值None
  • 哪一行显示值None?请edit问题并按照我的要求包含模板。

标签: python django post get django-views


【解决方案1】:

您的模板显示您正在将表单提交到没有 pk 的 URL:

{% url 'chat:index' %}

反转 URL 时应包含 pk,例如

{% url 'chat:index' pk %}

您需要在模板上下文中包含 pk,例如

return render(request, self.template_name, {'form': ChatForm(), 'pk': pk})

我看到您对/demo//&lt;pk&gt;/demo/ 使用相同的视图ProcessMessage。我建议对两个 URL 使用不同的视图,我认为这将有助于避免此类问题。

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2019-01-31
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多