【问题标题】:NoReverseMatch: with arguments '()' and keyword argumentsNoReverseMatch:带参数 '()' 和关键字参数
【发布时间】:2013-08-06 20:20:29
【问题描述】:

我正在使用 Django 1.5 并尝试将 args 传递给我的 URL。当我使用前两个参数时,下面的代码工作正常,第三个参数我得到一个错误。我已经提到了 url 用法的新 Django 1.5 更新,并相应地使用了 URL 名称的引号。

NoReverseMatch: Reverse for 'add_trip' with arguments '()' and keyword arguments '{u'city': 537, u'score': 537, u'time': 35703, u'distance': 1196.61}' not found

urls.py

url(
    r'^add/(?P<city>\w+)/(?P<score>\w+)/(?P<distance>\w+)/(?P<time>\w+)$',
    'trips.views.add_trip',
    name='add_trip'
),

html 文件

<a href="{% url "add_trip" city=data.city score=data.score distance=data.distance time=data.time%}">Add/delete</a>

如果我只使用两个参数(即城市和分数,那么它工作正常),否则我会得到没有反向匹配错误。

views.py

def SearchTrips(request):
    city = request.POST['city'].replace(" ","%20")
    location = request.POST['location'].replace(" ","%20")
    duration = request.POST['duration']
    #url = "http://blankket-mk8te7kbzv.elasticbeanstalk.com/getroutes?city=%s&location=%s&duration=%s" % (city, location, duration)
    url= "http://blankket-mk8te7kbzv.elasticbeanstalk.com/getroutes?city=New%20York%20City&location=Park%20Avenue&duration=10"
    print url

    try:
        resp = urllib2.urlopen(url)
    except:
        resp = None

    if resp:
        datas = json.load(resp)
    else:
        datas = None

    return render(request, 'searchtrips.html', {'datas': datas})

【问题讨论】:

  • 你能发表你的看法吗?
  • 我认为 regx 存在一些问题,如果我将“分数”传递给所有参数,那么我不会收到此错误。
  • 我认为data.time 不符合\w+ 格式。仔细检查。
  • 这里的时间以秒为单位,它就像一个整数。我认为距离存在问题 - 因为它是十进制的。如何更改 URL 中距离的正则表达式?

标签: django django-templates


【解决方案1】:

距离值1196.61 与正则表达式不匹配,因为有小数点。

你可以使用

(?P<distance>[\w\.]+)

匹配大写 A-Z、小写 a-z、数字 0-9、连字符和小数点。

或者,您可以使用

(?P<distance>[\d\.]+)

仅匹配数字 0-9 和小数点。

【讨论】:

  • 谢谢,这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2012-12-11
  • 2013-07-25
  • 2016-05-01
  • 1970-01-01
  • 2021-08-24
  • 2013-12-22
  • 2016-11-11
  • 2019-07-21
相关资源
最近更新 更多