【问题标题】:Django url reverse errorDjango url反向错误
【发布时间】:2016-12-23 08:56:51
【问题描述】:

我有一个这样的 url 配置

urlpatterns = [
    url(r'webhook/', include('foward_bot.telegram_API.urls', namespace='api_webhook'), name='webhook'),
]

在 telegram_API.urls 我有

urlpatterns = [
    url(r'^(?P<token>[-_:a-zA-Z0-9]+)/$', TelegramView.as_view(), name='api_webhook'),
]

当我尝试以这种方式反向访问此网址时

webhook = reverse('webhook', args={instance.token})

我得到错误:

`Reverse for 'webhook' with arguments '(u'297704876:AAHiEy-slaktdaSMJfZtcnoDC-4HQYYDNOs',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []`

我尝试了不同的变体,例如

webhook = reverse('webhook', kwargs={'token': instance.token}),
webhook = reverse('webhook:token', kwargs={'token': instance.token}),

但我总是类似NoReverseMatch错误

【问题讨论】:

  • 只是出于好奇,您是否对正则表达式有更好的运气 - ^(?P&lt;token&gt;[[-_:\w\d]+)/$
  • @Sayse 根本没有
  • @Sayse 我已经尝试了很多选项,包括您建议的选项,我应该特别更新哪个选项?
  • 主要是reverse('api_webhook:api_webhook',因为在我看来这是最有可能的问题
  • 作为最后一件事,只需将 webhook 设置为 reverse 将创建的字符串 - '/webhook/297704876:AAHiEy-slaktdaSMJfZtcnoDC-4HQYYDNOs/'。这至少可以清楚地表明错误是与 url 正则表达式有关还是与反向

标签: django url-routing django-urls


【解决方案1】:

反转网址

由于您已经为webhook定义了一个命名空间,所以当您需要将url与视图名称反转时,您需要specify the namespace

reverse('api_webhook:api_webhook', kwargs={'token': instance.token})

reverse('api_webhook:api_webhook', args=(instance.token,))

对您的 url conf 的一些改进:

根据我的经验,这里有一些关于 urls.conf 的额外提示。

urlpatterns = [
    url(r'^webhook/', include('foward_bot.telegram_API.urls', namespace='api_webhook'), name='webhook'),
]

urlpatterns = [
    url(r'(?P<token>[-_:a-zA-Z0-9]+)/$', TelegramView.as_view(), name='api_webhook'),
]

【讨论】:

  • @ken 我已经测试了上面的代码并且它确实有效,您在创建这篇文章后对代码进行任何更改吗?
  • 当然,我在尝试解决问题时进行了更改。但是我已经完全按照这种方式进行了尝试,但没有成功。总是说api_webhook is not a registered namespace。直到现在我都无法解决它。这很令人困惑,因为在 django 文档中他们使用了&lt;app_name&gt;:&lt;namespace&gt;,我也尝试过,但也没有用
  • 我发现了问题 - 应用程序是嵌套的,所以我将包含移动到根 url 文件并解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2015-01-07
  • 2014-01-20
  • 2023-03-21
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多