请问如何在我的 url.py django 3 中使用 slug 创建 url?
Please how can I create url using slug in my url.py django 3?
我很抱歉解释得太长 我是 Django 的新手,看到一本名为“Tango with Django”1.9 版的书,但我正在用最新版本的 Django 编写我的代码,即 3.2。但是当我来到第 6 章时,我被困住了,因为鼻涕虫。我尽力解决了我的水平,但只是花了几个小时没有任何东西。
所以这是我想做的事情的简要说明,我有一个名为 tango_with_django_project 的 django 项目,我创建了一个名为 rango 的新应用程序,因此在 mode.py 的 rango 应用程序中,我创建了包括 slug 在内的模型。我遇到的问题是每当我在 urls.py 中编写路由时都会引发异常
TypeError at /rango/category/other-frameworks/
cannot unpack non-iterable Category object
Request Method: GET
Request URL: http://127.0.0.1:8000/rango/category/other-frameworks/
Django Version: 3.2.7
Exception Type: TypeError
Exception Value:
cannot unpack non-iterable Category object
Exception Location: C:\Users\Userpc\code\env\lib\site-packages\django\db\models\sql\query.py, line 1283, in build_filter
Python Executable: C:\Users\Userpc\code\env\Scripts\python.exe
Python Version: 3.8.5
Python Path:
['C:\Users\Userpc\code\tango_with_django_project',
'C:\Program Files (x86)\Python38-32\python38.zip',
'C:\Program Files (x86)\Python38-32\DLLs',
'C:\Program Files (x86)\Python38-32\lib',
'C:\Program Files (x86)\Python38-32',
'C:\Users\Userpc\code\env',
'C:\Users\Userpc\code\env\lib\site-packages']
Server time: Sat, 16 Oct 2021 14:20:06 +0000
#我的urls.py
来自 django.urls 导入路径
来自 rango 导入视图
urlpatterns = [
path('', views.index, name='index'),
path('about/', views.about),
path('index/', views.index),
path('category/<slug:category_name_slug>/',views.show_category, name='show_category'),
]
#views.py
from django.shortcuts import render
from rango.models import Category, Page
from rango.models import Page
def show_category(request, category_name_slug):
context_dict = {}
try:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(category)
context_dict['pages'] = pages
context_dict['category'] = category
except Category.DoesNotExist:
context_dict['category'] = None
context_dict['pages'] = None
return render(request, 'rango/category.html', context_dict)
def index(request):
category_list = Category.objects.order_by('-likes')[:5]
context_dict = {'categories': category_list}
return render(request, 'rango/index.html', context=context_dict)
def about(request):
context_dict = {'mss': "This tutorial has been put together by Yusuf"}
return render(request,'rango/about.html', context=context_dict)
<!DOCTYPE html>
<html>
<head>
<title>Rango</title>
</head>
<body>
<div>
{% if category %}
<h1>{{ category.name }}</h1>
{% if pages %}
<ul>
{% for page in pages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<strong> No pages curently in category.</strong>
{% endif %}
{% else %}
The specified category does not exist!
{% endif %}
</div>
</body>
</html>
#MODEL.PY
from django.db import models
from django.template.defaultfilters import slugify
class Category(models.Model):
name = models.CharField(max_length=128,unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(null=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = 'categories'
def __str__(self):
return self.name
class Page(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
def __str__(self):
return self.title
您不能使用 category
在 页 = Page.objects.filter(<s>类别</s>)
中进行过滤。不清楚您要过滤页面的哪个字段,因此您需要指定链接到该类别的字段,并过滤:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(<b>category=category</b>)
在您看来,您应该在 块 try
-except
块之外呈现页面,因此:
def show_category(request, category_name_slug):
context_dict = {}
try:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(category=category)
context_dict['pages'] = pages
context_dict['category'] = category
except Category.DoesNotExist:
context_dict['category'] = None
context_dict['pages'] = None
# outside the try-except ↓
return render(request, 'rango/category.html', context_dict)
我很抱歉解释得太长 我是 Django 的新手,看到一本名为“Tango with Django”1.9 版的书,但我正在用最新版本的 Django 编写我的代码,即 3.2。但是当我来到第 6 章时,我被困住了,因为鼻涕虫。我尽力解决了我的水平,但只是花了几个小时没有任何东西。 所以这是我想做的事情的简要说明,我有一个名为 tango_with_django_project 的 django 项目,我创建了一个名为 rango 的新应用程序,因此在 mode.py 的 rango 应用程序中,我创建了包括 slug 在内的模型。我遇到的问题是每当我在 urls.py 中编写路由时都会引发异常
TypeError at /rango/category/other-frameworks/ cannot unpack non-iterable Category object Request Method: GET Request URL: http://127.0.0.1:8000/rango/category/other-frameworks/ Django Version: 3.2.7 Exception Type: TypeError Exception Value:
cannot unpack non-iterable Category object Exception Location: C:\Users\Userpc\code\env\lib\site-packages\django\db\models\sql\query.py, line 1283, in build_filter Python Executable: C:\Users\Userpc\code\env\Scripts\python.exe Python Version: 3.8.5 Python Path:
['C:\Users\Userpc\code\tango_with_django_project', 'C:\Program Files (x86)\Python38-32\python38.zip', 'C:\Program Files (x86)\Python38-32\DLLs', 'C:\Program Files (x86)\Python38-32\lib', 'C:\Program Files (x86)\Python38-32', 'C:\Users\Userpc\code\env', 'C:\Users\Userpc\code\env\lib\site-packages'] Server time: Sat, 16 Oct 2021 14:20:06 +0000
#我的urls.py 来自 django.urls 导入路径 来自 rango 导入视图
urlpatterns = [
path('', views.index, name='index'),
path('about/', views.about),
path('index/', views.index),
path('category/<slug:category_name_slug>/',views.show_category, name='show_category'),
]
#views.py
from django.shortcuts import render
from rango.models import Category, Page
from rango.models import Page
def show_category(request, category_name_slug):
context_dict = {}
try:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(category)
context_dict['pages'] = pages
context_dict['category'] = category
except Category.DoesNotExist:
context_dict['category'] = None
context_dict['pages'] = None
return render(request, 'rango/category.html', context_dict)
def index(request):
category_list = Category.objects.order_by('-likes')[:5]
context_dict = {'categories': category_list}
return render(request, 'rango/index.html', context=context_dict)
def about(request):
context_dict = {'mss': "This tutorial has been put together by Yusuf"}
return render(request,'rango/about.html', context=context_dict)
<!DOCTYPE html>
<html>
<head>
<title>Rango</title>
</head>
<body>
<div>
{% if category %}
<h1>{{ category.name }}</h1>
{% if pages %}
<ul>
{% for page in pages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
{% else %}
<strong> No pages curently in category.</strong>
{% endif %}
{% else %}
The specified category does not exist!
{% endif %}
</div>
</body>
</html>
#MODEL.PY
from django.db import models
from django.template.defaultfilters import slugify
class Category(models.Model):
name = models.CharField(max_length=128,unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(null=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
class Meta:
verbose_name_plural = 'categories'
def __str__(self):
return self.name
class Page(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
def __str__(self):
return self.title
您不能使用 category
在 页 = Page.objects.filter(<s>类别</s>)
中进行过滤。不清楚您要过滤页面的哪个字段,因此您需要指定链接到该类别的字段,并过滤:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(<b>category=category</b>)
在您看来,您应该在 块 try
-except
块之外呈现页面,因此:
def show_category(request, category_name_slug):
context_dict = {}
try:
category = Category.objects.get(slug=category_name_slug)
pages = Page.objects.filter(category=category)
context_dict['pages'] = pages
context_dict['category'] = category
except Category.DoesNotExist:
context_dict['category'] = None
context_dict['pages'] = None
# outside the try-except ↓
return render(request, 'rango/category.html', context_dict)