【问题标题】:NoReverseMatch (related to pk) : djangoNoReverseMatch(与pk相关):django
【发布时间】:2012-10-24 19:44:54
【问题描述】:

我想从表单中获取发布的数据并显示它们。 我使用“{% url uasite1.views.sell_detail sell_detail.pk %}”根据他们的pk提取数据。

但是,只是 [ NoReverseMatch ・・・, Reverse for 'uasite1.views.sell_detail' with arguments '('',)' and keyword arguments '{}' not found.] 出现了。 我的代码有什么问题?

models.py

from django.db import models
from django.forms import ModelForm

class Sell(models.Model):
    subject = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    condition = models.CharField(max_length=100)
    email = models.EmailField()
    body = models.CharField(max_length=200)

forms.py

from django.forms import ModelForm
from uasite1.models import Sell

class SellForm(ModelForm):
    class Meta:
        model = Sell

views.py

from django.shortcuts import render_to_response,get_object_or_404
from django.http import HttpResponseRedirect
from uasite1.forms import SellForm
from uasite1.models import Sell
from django.template import RequestContext


def sell_detail(request, pk):
    sell = get_object_or_404(Sell, pk=int(pk))
    return render_to_response('sell_display.html',{'sell':sell})

def sell_create(request):
    context = {}
    if request.method == 'POST':
        form = SellForm(request.POST)
        if form.is_valid():
            new_sell = form.save()
            return HttpResponseRedirect('/sechand/%d/' % new_sell.pk)
    else:
        form = SellForm()
    context['form'] = form
    return render_to_response('sell.html',context,context_instance = RequestContext(request))

def Electronics(request):
    latest_sell_list = Sell.objects.all()[:5]
    return render_to_response('electronics.html',{'latest_sell_list':latest_sell_list})

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^sechand/$','uasite1.views.sell_create'),
    url(r'^sechand/(\d+)/$', 'uasite1.views.sell_detail'),
    url(r'^electronics/$', 'uasite1.views.Electronics'),
    url(r'^admin/', include(admin.site.urls)),
)

electronics.html

{% extends 'base.html' %}
{% block extrahead %}
    <p><strong>Electronics</strong></p>

{% endblock %}

{% block content %}

    <p><a href="{% url uasite1.views.sell_detail sell_detail.pk %}">{{ sell.subject }}</a></p>

{% endblock %}

【问题讨论】:

    标签: django django-forms django-templates primary-key


    【解决方案1】:

    更改
    &lt;a href="{% url uasite1.views.sell_detail sell_detail.pk %}"&gt;

    至:
    &lt;a href="{% url uasite1.views.sell_detail sell.pk %}"&gt;

    【讨论】:

    • 谢谢,但还是不行。显示显示 [Reverse for 'uasite1.views.sell_detail' with arguments '('',)' and keyword arguments '{}' not found.] 和 [

      {{ sell.subject }}

      ] 在“模板渲染时出错”中突出显示,并且,[return render_to_response('electronics.html',{'latest_sell_list' :latest_sell_list})] 在“Traceback”中突出显示。
    【解决方案2】:

    有几个错误。

    1:更改您的网址

    url(r'^sechand/(\d+)/$', 'uasite1.views.sell_detail'),
    

    url(r'^sechand/(P<pk>\d+)/$', 'uasite1.views.sell_detail'),
    

    这使得 url 接受通过pk 传递给视图的参数。

    2:您的Electronics() 视图表明您正在将列表传递给模板,因此您需要更新模板以迭代此列表并适当地呈现列表中的每个项目。并确保正确使用变量名。

    {% block content %}
    
        {%for sell in latest_sell_list %}
            <p><a href="{% url uasite1.views.sell_detail sell.pk %}">{{ sell.subject }}</a></p>
    
        {%endfor%}
    {% endblock %}
    

    【讨论】:

    • 谢谢,但结果仍然显示“NoReverseMatch 错误” [Reverse for 'uasite1.views.sell_detail' with arguments '(1,)' and keyword arguments '{}' not found。 ] 虽然将【arguments'('',)'】改为了【arguments '(1,)'】。此外,在我将“P”添加到我的 urls.py 后,“sell_display”页面开始无法正常工作(在localhost:8000/sechand/1 找不到页面(404))可能是我的代码有其他问题?
    • 在我的代码中添加“?P”后,它成功运行了!非常感谢。
    猜你喜欢
    • 2022-08-09
    • 2013-09-07
    • 1970-01-01
    • 2018-09-23
    • 2019-12-19
    • 2018-04-21
    相关资源
    最近更新 更多