各位大神晚安,目前正在使用django架设练习网页,在设置Django urls name一直发生错误,请问有无熟悉django的大神可以给点方向!
以下是我的程式码
urls.py
from django.contrib import adminfrom django.urls import pathfrom . import viewsurlpatterns = [ path('', views.showtemplate), path('<int:id>/', views.singleVendor, name='vendor_id'), # 这一行 path('create', views.vendor_create_view),]`
views.py
from django.shortcuts import renderfrom .models import Vendorfrom .forms import VendorForm #import相对应的model Formfrom .forms import RawVendorForm # 新增 RawVendorFormfrom django.http import Http404from django.shortcuts import get_object_or_404# Create your views here.def showtemplate(request): vendor_list = Vendor.objects.all() # 把所有 Vendor 的资料取出来 context = {'vendor_list': vendor_list} # 建立 Dict对应到Vendor的资料, return render(request, 'vendors/vendor_detail.html', context)#建立class [vendor_create_view]def vendor_create_view(request): form = RawVendorForm(request.POST or None) if form.is_valid(): Vendor.objects.create(**form.cleaned_data) form = RawVendorForm() context = { 'form' : form } return render(request, "vendors/vendor_create.html", context)def singleVendor(request, id): vendor_list = get_object_or_404(Vendor, id=id) # try: # vendor_list = Vendor.objects.get(id=id) # except Vendor.DoesNotExist: # raise Http404 context = { 'vendor_list': vendor_list } return render(request, 'vendors/vendor_detail.html', context)
modles.py
from django.db import models# 新增from django.contrib import admin# 额外 import 这个过滤套件from django.utils.translation import gettext_lazy as _from django.urls import reverse #新增# Create your models here.class Vendor(models.Model):vendor_name = models.CharField(max_length = 20) # 摊贩的名称store_name = models.CharField(max_length = 10) # 摊贩店家的名称phone_number = models.CharField(max_length = 20) # 摊贩的电话号码address = models.CharField(max_length = 100) # 摊贩的地址 #新增def get_absolute_url(self):return reverse("vendor_id", kwargs={"id": self.id})
vedor_detail.html
<!DOCTYPE html><html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body>{% extends "base.html" %}{% block title %} My store {% endblock %}{% block content%}{% for vlist in vendor_list %} <h1> 店家 : {{vlist.vendor_name}} </h1> <p> <a href= {{ vlist.get_absolute_url }}> More detail...</a> </p>{% endfor %}{% endblock %} </body></html>
错误原因:TypeError at /vendor/1/
'Vendor' object is not iterable
Request Method:GET
Request URL:http://127.0.0.1:8000/vendor/1/
Django Version:2.2.3
Exception Type:TypeError
Exception Value:
'Vendor' object is not iterable
有google原因是因对跌代,试着修改vedor_detail,还是会显示失败,请各位大神帮帮忙