问题
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