【问题标题】:Django: reverse() does not find view with args/kwargs givenDjango:reverse() 找不到给定 args/kwargs 的视图
【发布时间】:2018-01-11 08:18:05
【问题描述】:

有一些帖子与我的问题有关。但是,似乎没有一个可以解决以下问题:

我在 myapp/urls.py 中定义了 url:

app_name = "myapp"
urlpatterns=[
    url(r'^$', views.index, name="index"),
    url(r'^adduser/$', views.addUser, name="adduser"),
    ]

以及myapp/views.py中对应的视图:

def index(request, status_msg=None, error_msg=None):
    return HttpResponse(render(request, "myapp/index.html", 
                               context={"error_message":error_msg, "status_message":status_msg})) 

def addUser(request):
    try:
        uname=request.POST["user_name"]
    except KeyError:
        url = reverse("myapp:index", args=(None, "No user name specified."))
        return HttpResponseRedirect(url)
    # ... adding user to db ...
    url = reverse("myapp:index", args=("Added user '%s'"%uname,))
    return HttpResponseRedirect(url)

将参数从 addUser() 中的重定向传递给 index() 的任何一种变体都会产生此类错误

Reverse for 'index' with arguments '(None, u'No user name specified.')' not found. 1 pattern(s) tried: [u'myapp/$']

我不明白我在这里做错了什么。似乎找到了索引视图但无法识别允许请求之外的任何参数?

使用 kwargs 代替 args 也无济于事。

非常感谢任何建议。已经谢谢了!

【问题讨论】:

  • 但是索引 URL 不带任何参数。你为什么要通过一些?
  • (即使是这样,“未指定用户名”也不是您在 URL 中传递的那种东西。)
  • 我这里好像有些误会。因此,如果不应该被 url 捕获,则不能将 args 或 kwargs 传递给视图?
  • 你看,在 addUser() 之后,我想回到索引并显示相应的消息。在执行简单的 HttpResponseRedirect(reverse("myapp:index")) 并在 index() 中添加一些代码以检查这些 POST 值是否存在之前直接编辑请求的 POST 字典是否合理?
  • 如果你不希望数据在 URL 中传递,你希望它从哪里来?重定向是对浏览器请求新 URL 的指令。视图的参数仅来自 URL。如果您想在请求之间传递其他信息,请使用会话。

标签: python django


【解决方案1】:

您的 URL 似乎不支持参数(即在正则表达式中捕获的组)。因此,您应该只使用:

reverse("myapp:index")

查看reverse() 函数here 的文档。

【讨论】:

  • 感谢您的建议。那么你将如何将消息传回索引呢?
  • 一种方法是使用messages framework
  • 我会调查一下。谢谢!
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2020-09-16
  • 2017-01-28
  • 1970-01-01
  • 2017-03-26
相关资源
最近更新 更多