У меня ошибка

TypeError at /app/^detail/(?P1[0-9]+)/$
detail() got an unexpected keyword argument 'pk'

. Я написал urls.py

urlpatterns = [
    path('top/', views.top, name='top'),
    path(r'^detail/(?P<pk>[0-9]+)/$',views.detail , name='detail'),
]

В views.py

def top(request):
    content = POST.objects.order_by('-created_at')
    page = _get_page(blog_content, request.GET.get('page'))
    return render(request, 'top.html',{'content':content,"page":page})

def detail(request):
    content = POST.objects.order_by('-created_at')
    return render(request, 'detail.html',{'content':content})

В top.html

    <div>
             {% for content in page %}
                <div>
                     <h2>{{ content.title }}</h2>
                </div>
             {% endfor %}
     </div>
     <div>
             {% for content in page %}
                <h2>{{ content.title }}</h2>
                <p><a href="{% url 'detail' content.pk %}">SHOW DETAIL</a></p>
             {% endfor %}
     </div>
0
user7676799 1 Янв 2018 в 18:31

2 ответа

Лучший ответ

Вы используете новую функцию path(), которая не принимает регулярное выражение. Либо вернитесь к старой функции url(), либо используйте синтаксис <type:name>:

path('detail/<int:pk>/', ...)
1
Daniel Roseman 1 Янв 2018 в 15:39

В функции просмотра detail() нет аргумента с именем pk. Добавьте его как второй аргумент, который должен решить вашу проблему:

def detail(request, pk):

1
dvnguyen 1 Янв 2018 в 15:33