【问题标题】:Reversing a url with two slugs用两个 slug 反转一个 url
【发布时间】:2019-03-20 22:26:11
【问题描述】:

我正在尝试了解从 2 个相关类中添加类别和详细信息的基本示例。

/categories URL 有效,但我无法使 /categories/detail 有效。我收到以下错误:

Reverse for 'categorydetail' with arguments '('onedetailfromcategory',)' not found. 1 pattern(s) tried: ['(?P<cat_slug>[^/]+)/(?P<det_slug>[^/]+)$']

这是我的文件:

#Models:

class Categories(models.Model):
    name = models.CharField(max_length=50,unique=True)
    cat_slug = models.SlugField(max_length=100,unique=True)

    def __str__(self):
        return self.name

class Details(models.Model):
    title = models.CharField(max_length=100)
    det_slug= models.SlugField(max_length=100,unique=True)

    categorie = models.ForeignKey('Categories', on_delete=models.CASCADE,  related_name="Categories")


    def __str__(self):
        return self.title


#Views:         
class ListCategorie(DetailView):
    model = Categories
    slug_field = 'cat_slug'
    context_object_name = "listcategories"
    template_name = "show/categories.html"

class DetailCategorie(DetailView):
    model = Details
    slug_field = 'det_slug'
    context_object_name = "categorydetail"
    template_name = "show/detail.html"

#Urls:
    path('<cat_slug>', views.ListCategorie.as_view(), name='listcategories'),
    path('<cat_slug>/<det_slug>', views.DetailCategorie.as_view(), name='categorydetail'),

#Categories.html

{% for x in listcategories.Categories.all %}
<p> {{x.title}} </p>
<li><a href="{% url 'categorydetail' x.det_slug %}">URL</a></li>
{% endfor %}

【问题讨论】:

  • 你检查过这个stackoverflow.com/questions/15080083/… 吗?
  • “不工作”是对问题的完全无用的描述。
  • 很公平。已编辑。
  • 使用related_name="Categories" 非常令人困惑。您使用它来获取类别的相关详细信息,因此related_name='details' 和{% for detail in listcategories.details.all %} 会更清晰。
  • 请注意,Django 中的建议是对模型名称使用单数,例如Categorie 和 Detail 而不是 Categories 和 Details。我也会使用slug 而不是cat_slug 和det_slug。您的代码通常类似于 categorie.slug 或 detail.slug,因此很清楚它是什么类型的 slug,没有字段名中的前缀。

标签: python django django-views django-urls


【解决方案1】:

您的网址格式是

path('<cat_slug>/<det_slug>', views.DetailCategorie.as_view(), name='categorydetail'),

因此在反向URL时需要提供cat_slug和det_slug:

{% url 'categorydetail' x.categorie.cat_slug x.det_slug %}

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 2020-08-16
    • 2021-06-29
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2012-12-22
    • 2022-12-08
    • 2019-08-07
    相关资源
    最近更新 更多