【问题标题】:() missing 1 required positional argument: 'id'() 缺少 1 个必需的位置参数:'id'
【发布时间】:2019-03-25 15:01:03
【问题描述】:

我在尝试显示单个项目时不断收到错误消息。 这是我的代码,我希望它可以理解。我正在使用 django 1.11

1.我的网址页面:

urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^about/', views.aboutus, name='aboutus'),
url(r'^specialoffers/', views.offers, name='offers'),
url(r'^contactus/', views.contact, name='contact'),
url(r'^excursions/', views.excursions, name='excursions'),
url(r'^singleexcursion/<int:id>/', views.singleexcur, name='singleexcur'),
url(r'^booking/', views.booking, name='booking'),
url(r'^confirmation/', views.confirming, name='confirming'),
url(r'^payment/', views.payment, name='payment'),

]

  1. 我的浏览页面:

    def singleexcur (request,id):

    excur = Excursion.objects.get(id = id)
    
    
    return render(request, "excursions/single.html", {"excur": excur })
    
  2. 我的错误: /singleexcursion// 处的类型错误 singleexcur() 缺少 1 个必需的位置参数:'id'

【问题讨论】:

  • 你“混合”pathre_path 语法。

标签: python django django-urls


【解决方案1】:

处理空 id 的一种简单方法是使用多个 url 进行游览:

 url(r'^singleexcursion/', views.singleexcur, name='singleexcur'),
 url(r'^singleexcursion/<int:id>/', views.singleexcur, name='singleexcur'),

【讨论】:

    【解决方案2】:

    开始,引入了一个新的语法,这样你就可以写&lt;int:id&gt;这样的参数,但这适用于url(..)的构造,这里你需要写路径在类似正则表达式的语法中,因此您可以将 URL 指定为:

    # before Django-2.0
    
    urlpatterns = [
        url(r'^$', views.home, name='home'),
        url(r'^about/$', views.aboutus, name='aboutus'),
        url(r'^specialoffers/$', views.offers, name='offers'),
        url(r'^contactus/$', views.contact, name='contact'),
        url(r'^excursions/$', views.excursions, name='excursions'),
        url(r'^singleexcursion/(?P<id>\d+)/', views.singleexcur, name='singleexcur'),
        url(r'^booking/$', views.booking, name='booking'),
        url(r'^confirmation/$', views.confirming, name='confirming'),
        url(r'^payment/$', views.payment, name='payment'),
    ]

    或者在 及更高版本中,您可以使用path(..) [Django-doc]。您可以将其与re_path(..) [Django-doc] 交织,这是url(..) 的新名称,因为url(..) [Django-doc] 最终可能会被删除。

    例如:

    # Django-2.0 and above
    
    urlpatterns = [
        re_path(r'^$', views.home, name='home'),
        re_path(r'^about/$', views.aboutus, name='aboutus'),
        re_path(r'^specialoffers/$', views.offers, name='offers'),
        re_path(r'^contactus/$', views.contact, name='contact'),
        re_path(r'^excursions/$', views.excursions, name='excursions'),
        path('singleexcursion/<int:id>/', views.singleexcur, name='singleexcur'),
        re_path(r'^booking/$', views.booking, name='booking'),
        re_path(r'^confirmation/$', views.confirming, name='confirming'),
        re_path(r'^payment/$', views.payment, name='payment'),
    ]

    【讨论】:

    • ..当我改成这个:url(r'^singleexcursion/(?P&lt;id&gt;\d+)/', views.singleexcur, name='singleexcur'),它带来了这个错误:Reverse for 'singleexcur' with no arguments not found. 1 pattern(s) tried: ['singleexcursion/(?P&lt;id&gt;\\d+)/']
    • @NegritaDevelopers: 那是因为你定义了一个{% url 'singleexcur' %},或者一个redirect('singleexcur'),等等,但是没有一个id=some_id,所以现在这条路径没有感觉了。
    • 应该添加到视图中吗?它更像这样:&lt;a class="product__btn-book btn btn-secondary btn--round" href="{% url 'profiles:singleexcur' %}"&gt;book now&lt;/a&gt;
    • @NegritaDevelopers:您应该将href="{% url ... %}" 替换为href={% url 'profiles:singleexcur' id=some_id %}"some_id 一个变量,该变量证明Excursionid 为“书”。
    • 我改了..错误依旧:Reverse for 'singleexcur' with no arguments not found. 1 pattern(s) tried: ['singleexcursion/(?P&lt;id&gt;\\d+)/']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2017-03-27
    • 2019-11-12
    相关资源
    最近更新 更多