首页 > 解决方案 > 未找到关键字参数“{'pk': ''}' 的“ques_detail”的反向操作。尝试了 1 种模式:['ques_detail/(?P[0-9]+)/$']

问题描述

我收到以下错误:

未找到关键字参数“{'pk': ''}' 的“ques_detail”的反向操作。尝试了 1 种模式:['ques_detail/(?P[0-9]+)/$']

有谁知道如何解决它?

我尝试了许多网站上发布的解决方案,但没有任何效果。有人好心帮忙。

网址.py

from django.urls import path
from . import views
urlpatterns = [
    path('logout', views.logout, name='test_logout'),
    path('register', views.register, name = 'register'),
    path('', views.welcome, name='welcome'),
    path('instructions', views.instructions, name = 'instructions'),
    path('ques_detail/<int:pk>/',views.ques_detail,name='ques_detail')
]

视图.py

def instructions(request):
    return render(request,'events/instructions.html')

def ques_detail(request, pk):
    ques = get_object_or_404(Questionm, pk=pk)
    return render(request, 'events/ques_detail.html', {'ques': ques})

说明.html

{% extends 'base.html' %}
{% block content %}
    <div  class="register">
     <h1>Instructions</h1>
    </div>
    <br><br><hr><hr>
    <ul class="list-group">
      <li class="list-group-item">Lorem ipsum dolor sit amet, consectetur...</li>
    </ul>

    <div class="start">
        <button type="button" class="btn btn-success" style="width: 350px; 
height: 80px;font-size : 500px;"><a href="{% url 'ques_detail' pk=ques.pk %}"> 
<h4>Start Test</h4></a></button>
    </div>
{% endblock %}

标签: pythondjango

解决方案


视图中缺少正确instructions调用“开始测试”页面的内容。

在模板中,您使用 url 定义按钮以调用问题:

<button type="button" class="btn btn-success" style="width: 350px; 
    height: 80px;font-size : 500px;">
    <a href="{% url 'ques_detail' pk=ques.pk %}"> 
    <h4>Start Test</h4></a>
</button>

{% url 'ques_detail' pk=ques.pk %}将调用视图ques_detail并尝试使用参数传递问题 ID pk,好的,但您从未ques.pk在此处定义,这就是您得到空字符串和反向错误的原因。

instructions.html被渲染时,你必须ques在模板的上下文中定义一个对象,就像你对render(request, 'events/ques_detail.html', {'ques': ques}).

所以你可以有如下视图:

def instructions(request):
    ques = Questionm.objects.first()
    context = {'ques': ques}
    return render(request,'events/instructions.html', context)

(我随机查询一个问题(Questionm.objects.first())你必须替换它来查询你需要的问题。)


推荐阅读