使用Django Generic-Detail视图将pk转换为Slug

时间:2019-02-25 01:59:04

标签: python django django-generic-views

我已经成功建立了测试站点,现在正在尝试将url链接从私钥更改为子链接,以使该链接对用户而言更加直观。我已经阅读了许多问题,但是还没有找到一个可以充分回答我的问题的问题。

我了解我使用exmodel.name而不是.slug(下面的代码);但是exmodel.slug不返回任何内容,数据库记录是一个单词,因此不重要(图我一次可以解决一个问题)。 exmodel_list.html会按预期编译,但是exmodel_detail.html返回404错误。这对我来说没有意义,因为当我使用该方法时它可以工作。您能提供的任何见解或文章将不胜感激。感谢您的帮助!

models.py

class ExModel(models.Model):
    name = models.CharField(max_length=50, help_text='Enter name of example model')
    slug = models.SlugField(blank=True)

    def __str__(self):
        """String for representing the Model object."""
        return self.name

    def save(self, *args, **kwargs):
        if not self.id:
            self.slug = slugify(self.name)
        super(ExModel, self).save(*args, **kwargs)

    def get_absolute_url(self):
        """Returns the url to access a detail record for this model."""
        return reverse('exmodel-detail', args=[str(self.id)])

views.py

class ExModelListView(generic.ListView):
    model = ExModel

class ExModelDetailView(generic.DetailView):
    model = ExModel

urls.py

app_name = 'presentInfo'
urlpatterns = [
    path('', views.index, name='index'),
    path('exmodel-test', views.ExModelListView.as_view(), name='exmodel'),
    path('exmodel-test/<slug:slug>/', views.ExModelDetailView.as_view(), name='exmodel-detail'),
]

exmodel_list.html模板

{% if exmodel_list %}
<ul>
    {% for exmodel in exmodel_list %}
        <li>
            <a href="{% url 'presentInfo:exmodel-detail' exmodel.name %}">{{ exmodel.name }}</a>
        </li>
    {% endfor %}
</ul>
{% else %} <ul><li><a href="">no models</a></li></ul>
{% endif %}

0 个答案:

没有答案