首页 > 解决方案 > 映射 Django url 和视图

问题描述

伙计们,我是 Django 的新手,但我对一些事情有点了解。我需要有关网址的帮助。因此,在我的 models.py 中,我定义了类别、子类别和产品模型,所有这些模型字段都有一个 slugfield。我还设法定义了索引页面 url 及其工作,但是在我想要的索引页面之后,当用户单击类别链接时,他将能够看到类别下的子类别,并且当用户单击子类别时,他将能够查看子类别中的产品。因此,例如,我想创建一个像 www.127.0000/electronics 这样的网址,电子类别,在电子产品下,用户将能够看到电视、微波子类别...当用户点击电视的链接时,URL 将是 www.127.0000/electronics/tvs,用户将在此页面上看到产品。这是我的models.py

class Category(models.Model):
    name= models.CharField(max_length=100)
    slug= models.SlugField(max_length= 100, unique= True)

    class Meta:
        ordering = ('name',)
        verbose_name= 'category'
        verbose_name_plural= 'categories'

    def __str__(self):
        return self.name

class SubCategory (models.Model):
    name = models.CharField(max_length= 200)
    slug = models.SlugField (max_length= 200, unique= True)
    category= models.ForeignKey(Category, on_delete= models.CASCADE)

    class Meta:
        ordering = ('name',)
        verbose_name= "SubCategory"
        verbose_name_plural= 'SubCategories'

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250)
    price = models.DecimalField(max_digits=10 , decimal_places=2)
    image = models.ImageField(max_length=20, blank= True)
    subcategory = models.ForeignKey(SubCategory, on_delete= models.CASCADE)

    class Meta:
        ordering = ('name',)
        verbose_name= 'product'
        verbose_name_plural = 'products'

    def __str__(self):
        return self.name

这是我的应用网址

urlpatterns= [
    path('', views.index, name='Index'),
    path('<slug:category_slug>/', views.category, name= 'Categories' )

视图.py 文件

def index (request):
    """"Defines homepage"""
    return render (request, 'index.html')

def category (request, category_slug):
     """Defines categories slug"""
    categories= get_object_or_404(Category, slug=category_slug)
    context= {'categories': categories}
    return render (request, 'category.html', context} 

这是我的类别 html gile

{% extends 'base.html' %}

{% block content %}

<p>
    <ul>
    {% for category in categories %}
    <li> {{category}} </li>
    {% empty %}
    <li> No Category has been added yet</li>
    {% endfor %}
</ul>
</p>

{% endblock content %}

请您指导正确的方向,以便当我点击 www.127.0000/clothes 时,我会看到衣服中的子类别,然后我点击和子类别,网址可能会更改为 127.000/clothes/men 衣服并显示男士产品衣服子类别。

标签: pythondjangodjango-viewsdjango-urls

解决方案


推荐阅读