【问题标题】:Cannot redirect to page using url parameter found in form无法使用表单中找到的 url 参数重定向到页面
【发布时间】:2023-03-19 10:05:01
【问题描述】:

我正在尝试从表单中的模块外键获取模块代码,并使用 HttpResponseRedirect 显示属于它的帖子,但出现错误: “str”对象没有属性“code”。我该如何解决这个问题?

追溯:

response = self.process_exception_by_middleware(e, request) ...
▶ Local vars

response = wrapped_callback(request, *callback_args, **callback_kwargs) ...

▼ Local vars
Variable    Value
request <WSGIRequest: POST '/forum/'>
self    <django.core.handlers.wsgi.WSGIHandler object at 0x03A88970>
wrapped_callback    <function forum_modules at 0x038DF618>
callback    <function forum_modules at 0x038DF618>
resolver_match  ResolverMatch(func=forum.views.forum_modules, args=(), kwargs={}, url_name=forum_modules, app_names=[], namespaces=['forum'])
resolver    <RegexURLResolver 'mysite.urls' (None:None) ^/>
callback_args   ()
response    None
middleware_method   <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x03AAAFD0>>
callback_kwargs {}
urlconf 'mysite.urls'
response_is_rendered    False


code = module.code ...
▼ Local vars
Variable    Value
module  'CA'
request <WSGIRequest: POST '/forum/'>

我改了以下

 module = request.POST.get('module')
 code = module.code

到:module_id = request.POST.get('module') 因为它包含模块的代码。但我现在收到此错误。

Reverse for 'forum_modules' with arguments '()' and keyword arguments '{'module_id': None}' not found. 0 pattern(s) tried: []

【问题讨论】:

  • 请给错误回溯
  • 您已从request.POST 获取字符串module。要从该字符串转到 Module 对象,您必须进行查找,例如Module.objects.get(...)。我们不能说查找应该是什么,因为你还没有说module 的值是什么。是主键、代码还是其他?
  • module 是 Post 中的外键。它具有主键作为代码。但是当我在表单中使用模块时,我会得到一个模块标题列表的下拉列表。我需要重定向代码。

标签: python django url httpresponse url-parameters


【解决方案1】:

在这两种情况下,您都试图找到一个不存在的 URL。您有一个没有参数的 forum_modules 命名 URL,但您试图找到一个以 module_idmodule 为参数的 forum_modules 命名 URL。

要让这样的东西起作用,你应该有这样的东西:

url(r'^(?P<module>\d+)/$', views.forum_modules, name='forum_modules'),

如果模块是一个数字。不同之处在于 URL 中的命名模式,然后它会尝试用你给它的任何东西替换它。如果它没有找到匹配的模式,你会得到那个错误。

或者,如果您希望拥有像 http://example.com/?module=123 这样的 URL 参数,则查询参数部分 (?module=123) 不由 reverse 处理,您必须自己附加它,例如:

import urllib
reverse("forum_modules") + "?%s" % urllib.urlencode({"module": code})

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多