NoReverseMatch (related to pk) : django

夙愿已清 提交于 2019-12-13 04:33:32

问题


I'd like to get posted-data from a form and display them. I used "{% url uasite1.views.sell_detail sell_detail.pk %}" to extract data according to their pk.

However, just [ NoReverseMatch ・・・, Reverse for 'uasite1.views.sell_detail' with arguments '('',)' and keyword arguments '{}' not found.] showed up. What's wrong with my codes?

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 %}

回答1:


There are couple of mistakes.

1: Change your url

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

to

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

This makes url to accept parameter which is passed to view through pk.

2: Your Electronics() view suggests that you are passing list to template so you need to update template to iterate over this list and render each item in list appropriately. And make sure to use variable names appropriately.

{% block content %}

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

    {%endfor%}
{% endblock %}



回答2:


Change
<a href="{% url uasite1.views.sell_detail sell_detail.pk %}">

to:
<a href="{% url uasite1.views.sell_detail sell.pk %}">



来源:https://stackoverflow.com/questions/13224213/noreversematch-related-to-pk-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!