NoReverseMatch(与pk相关):django [英] NoReverseMatch (related to pk) : django

查看:113
本文介绍了NoReverseMatch(与pk相关):django的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



但是,只有[NoReverseMatch ··,反向'uasite1.views.sell_detail'与参数'('',)'和关键字参数'{}'未找到。]出现了。
我的代码有什么问题?



models.py

 从django.db导入模型
从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。表单导入ModelForm 
from uasite1.models import Sell

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

views.py

  from django。快捷方式导入render_to_response,get_object_or_404 
from django.http import HttpResponseRedirect
from uasite1.forms import SellForm
from uasite1.models import从django.template导入
导入RequestContext


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

def sell_create(request):
context = {}
如果request.method =='POST':
form = SellForm(request.POST)
如果form.is_valid():
new_sell = form .save()
return HttpResponseRedirect('/ sechand /%d /'%new_sell.pk)
else:
form = SellForm()
上下文['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})


$ b $来自django的django.conf.urls导入模式,包括url


  contrib import admin 
admin.autodiscover()

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

electronics.html

  {%extends'base.html'%} 
{%block extrahead%}
< p>< strong>电子< / strong> ;< / p为H.

{%endblock%}

{%block content%}

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

{%endblock%}


解决方案

p>有几个错误。



1:更改你的URL

  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在...中销售$ _
< p>< a href ={%url uasite1.views.sell_detail sell.pk%}> {{sell.subject}}< / a>< / p为H.

{%endfor%}
{%endblock%}


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

解决方案

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

这篇关于NoReverseMatch(与pk相关):django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆