【问题标题】:NoReverseMatch Defining keyword arguments in reverse not workingNoReverseMatch 反向定义关键字参数不起作用
【发布时间】:2017-10-01 01:04:00
【问题描述】:

我有两个 Django 视图,一个加载表单集,一个提交表单集。这是为了避免表单重新提交或在 POST 后必须更改为不同的视图。提交后,我重定向回加载表单集的视图。但我无法让 URLs/reverse 工作。

这是我的观点和网址

def view(request, model1_id):

    #load formsets

    #pass information to submit view
    request.session['model1_session'] = int(model1_id)

    return render(request, 'app/view.html')

def view_submit(request):
    #get the session
    model1_object = request.session.get('model1_session')
    ...
    if request.method == 'POST':
        #save formset
        #error!!!!
        return HttpResponseRedirect(reverse("app:view", kwargs={"model1_id":  "model1_object"}))


url(r'^(?P<model1_id>[0-9]+)/model1/something/$', views.view, name='view' ),
url(r'^model1/something/submit/$', views.view_submit, name='view_submit' ),

但是当我按下提交时,一切都保存得很好,但是反过来就不行了....

Internal Server Error: /app/model1/something/submit/
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/username/Documents/Database/project/app/views.py", line 412, in view_submit
    return HttpResponseRedirect(reverse("app:view", kwargs={"model1_id":  "model1_object"}))
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 600, in reverse
    return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
  File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py", line 508, in _reverse_with_prefix
    (lookup_view_s, args, kwargs, len(patterns), patterns))
NoReverseMatch: Reverse for 'view' with arguments '()' and keyword arguments '{'model1_id': 'model1_object'}' not found. 1 pattern(s) tried: [u'app/(?P<model1_id>[0-9]+)/model1/something/$']

我不明白为什么它不接受 kwargs?

class Model1(models.Model):

    ...

    def __str__(self):
        return unicode(self.id) or u''

    def get_absolute_url(self):
        #I think this is the problem... but I don't know how to solve it...
        return reverse('app:view', kwargs={'id': self.id})

...帮助...

【问题讨论】:

  • reverse("app:view", kwargs={"model1_id": "model1_object"} 发生错误
  • 我没有看到任何类似于 'app:model1' 名称模式的网址。请提供完整的urls.py
  • @SardorbekImomaliev 啊,我在尝试简化代码时错过了这一点。现在应该使模式有意义吗?
  • 另请注意,您的model1_id 应该是一个数字而不是字符串,因为您的网址格式中有[0-9]+

标签: python django url redirect arguments


【解决方案1】:

您使用的是字符串"model1_object",而不是变量model1_object。试试:

reverse("app:view", kwargs={"model1_id":  model1_object})

请注意,您可以使用redirect 快捷方式而不是reverseHttpResponseRedirect 来简化代码:

from django.shortcuts import redirect

return redirect("app:view", model1_id=model1_object)

【讨论】:

  • 我不敢相信它是那么简单...很棒的提示,它的工作原理完全一样吗? :) 感谢您的帮助!
  • 是的,上面的 redirect 行是您代码的直接替换。
猜你喜欢
  • 2013-12-22
  • 2021-09-28
  • 2016-05-01
  • 1970-01-01
  • 2013-07-25
  • 2018-09-08
  • 2012-12-11
  • 2013-08-06
  • 2018-12-28
相关资源
最近更新 更多