【问题标题】:How to have Django templates display slugs如何让 Django 模板显示 slug
【发布时间】:2020-08-21 08:57:00
【问题描述】:

大家好,我是 django 的新手……我一直在观看 youtube 视频和阅读有关 Django 的书籍,但仍在为模板而苦苦挣扎。我正在做一个电子商务项目,我希望在模板方面得到一些帮助。所以我希望我的模板在侧边栏上显示一个类别列表作为链接。我已经在我的类别模型中定义了一个 slug 字段,并且我已经成功地映射了一个 url...但是我仍然没有在我的索引页面侧边栏上获得类别列表。

这是我的 url 模式,效果很好。当我点击 127.0.0.1.000/food 时它正在工作(食物是一个类别)

  path('<slug:category_slug>/', views.category, name='category'),

视图函数

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

这是我需要帮助的 categories_list.html 模板

<h3> Shop by Category </h3>
    {% if category in categories %}
    <li>
          <a href ="{{category.slug}}"> {{category.name}}</a>
    </li>
{% endif %}

我希望将类别显示在我的索引页面的侧边栏上作为链接。我在索引页面模板上使用了{% include 'category_list.html' %},当我在索引页面上时,它只显示按类别购物标题而不是类别。我已经在我的模板中尝试了 for 循环,但如果不起作用,它会一直说类别对象不可迭代......所以我最终使用了 if 语句。任何帮助将不胜感激

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    get_object_or_404() 方法返回单个实例,如果未找到则返回 None。 您不能以这种方式对对象进行迭代。

    尝试下一个

    查看

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

    模板

    {{ category.slug }}
    

    【讨论】:

    • 谢谢队友,我听从了你的建议,但不幸的是它没有工作....你的代码有点像我的,除了我的有点长。问题出在我认为的模板上。即使我使用categories= Category.objects.get(slug= slug) or categories= Category.objects.all(slug=slug 也没有任何效果。
    • 不同的是,如果你在分类中进行分类,它将不起作用。你能展示你的模型吗?它有财产蛞蝓吗?也许你用另一种方式称呼它。
    • 这就是我使用 if 语句的原因...... if 语句没有像 for 循环那样返回任何错误。我只是希望我的类别作为 url 链接显示在我的侧边栏上,可以单击并将地址从 127.0.000 更改为 127.0.000/electronics,例如
    • 这是我的类别模型,..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 def get_absolute_url(self): return reverse('category', kwargs={'category_slug': self.slug}) ...我刚刚添加了 get_absolute_url,我称它为模板仍然什么都没有。 for 循环不起作用,它一直说不能迭代对象
    • {{ category }} 显示什么?
    猜你喜欢
    • 1970-01-01
    • 2017-06-27
    • 2017-11-13
    • 2021-07-25
    • 2014-08-12
    • 1970-01-01
    • 2016-10-03
    • 2010-10-06
    • 2019-12-22
    相关资源
    最近更新 更多