使用关键字参数反转'onePart' - 问题

时间:2018-06-05 21:34:05

标签: python django

我尝试将我的网址设为 description /(party_number) - (pk),其中 party_number pk 不同每个对象。但不管怎样,我得到了错误:

  

使用关键字参数'{'pk':10,'nums':'A15151'}'找不到'onePart'。尝试了1种模式:['description /(?:(?P [\ d] +) - (?P [\ d] +)/)?$']

在我的 views.py:

def PartyNumView(request, page_number = 1):
    all_parties = Part.objects.all()
    current_page = Paginator(all_parties, 2)
    try:
        context = current_page.page(page_number)
    except PageNotAnInteger:
        context = current_page.page(1)
    except EmptyPage:
        context = current_page.page(current_page.num_pages)
    return render_to_response('part_list.html', {'PartyNum': context})


def forOne(request, pk):
    onePart = get_object_or_404(Part, pk=pk)
    return render_to_response('singlePart.html', {'onePart': onePart})

我的 urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^parties/(?P<page_number>[\d]+)/$', PartyNumView),
    url(r'^parties', PartyNumView),
    url(r'description/(?:(?P<nums>[\d]+)-(?P<pk>[\d]+)/)?$', forOne, name='onePart'),
    url(r'^main/', TemplateView.as_view(template_name='main.html')),       #static html
    url(r'^measures/', TemplateView.as_view(template_name='IcDesc.html')),       #static html

]

part_list.html:

{% for object in PartyNum %}

    <tr>
      <td>{{ forloop.counter }}</td>
      <td><a href="{% url 'onePart' pk=object.pk nums=object.Party_number %}"> {{ object.Party_number }}</a></td>
      <td>{{ object.Film }}</td>
      <td>{{ object.Thick }}</td>
      <td>{{ object.Critical_temperature }}</td>
      <td>{{ object.R_s }}</td>

  {% endfor %}

1 个答案:

答案 0 :(得分:2)

您应该更改网址参数的位置,将Party_number作为模板中的第一个参数。

<td><a href="{% url 'onePart' nums=object.Party_number pk=object.pk %}">...</td>

正如我在追溯参数中明确看到的那样{'pk': 10, 'nums':'A15151'} Party_number可能不仅包含数字,因此你的正则表达式是错误的。

而不是这个

 url(r'description/(?:(?P<nums>[\d]+)-(?P<pk>[\d]+)/)?$', forOne, name='onePart'),

尝试:

url(r'description/(?P<nums>\w.+)/(?P<pk>\d+)/$', forOne, name='onePart'),

该网址调用的视图def forOne(request, pk):没有所需的参数nums。最好使用默认值

def forOne(request, pk, nums=None):
    ''' '''