Może to być głupie pytanie, ale jestem początkującym w Django. Mam problem z błędem:

"PARTYNUMVIEW () Brakujący 1 Wymagany argument pozycyjny:" PK ""

views.py :

from description.models import Part
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.shortcuts import render_to_response, get_object_or_404

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

urls.py:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^parties/(\d+)/$', PartyNumView),
    url(r'^parties', PartyNumView),
    url(r'parties/(?P<pk>[\d]+)$', PartyNumView, 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

]

I trochę part_list.html:

  {% for object in PartyNum %}

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

 {% endfor %}

W modelach.py mam część klasy (modele.model)

Pomóż mi znaleźć błąd.

0
SBrain 5 czerwiec 2018, 00:03

3 odpowiedzi

Najlepsza odpowiedź

URL url(r'^parties', PartyNumView), nie przeanalizuje argumentu pk, ale nadal wywołuje funkcję PartyNumView.

Musisz użyć innego funkcji widoku dla tego konkretnego adresu URL lub użyj wartości domyślnej:

def PartyNumView(request, pk=None, page_number = 1):

Proponuję przeczytać Przewodnik stylu Pythona, aby dostosować kod do standardowa praktyka. Na przykład nazwy funkcji są zazwyczaj wszystkie małe i oddzielone podkreśleniem; Na przykład można przenikać na przykład do PartyNumView.

Korzystanie z tego stylu pomaga innym programistom Pythonowi zrozumieć swój kod i zapewnić lepsze odpowiedzi.

1
Ralf 4 czerwiec 2018, 21:17

Problemem jest twoje wzory URL url(r'^parties', PartyNumView),} Kiedy ten adres URL Twój widok nie otrzymasz argumentu PK, który podnosi wyjątek

1
juancarlos 4 czerwiec 2018, 21:26

Masz dwa wzory adresów URL dla PartyNumView;

url(r'^parties', PartyNumView),
url(r'parties/(?P<pk>[\d]+)$', PartyNumView, name='onePart'),

Wystarczy usunąć pierwszy, a wszystko będzie w porządku i dodać ^ przed drugim

url(r'^parties/(?P<pk>[\d]+)$', PartyNumView, name='onePart'),

Lub w przypadku, gdy widok serwuje 2 różne adresy URL, nie usuwaj pierwszego url, dodaj ^ w drugim adresie URL, a następnie dodaj domyślny argument dla pk w widoku, jak None

PartyNumView(request, pk=None, page_number = 1):
    all_parties = Part.objects.all()
2
Lemayzeur 4 czerwiec 2018, 21:25