Преобразование pk в слаг с помощью Django-Generic-Detail view - PullRequest
0 голосов
/ 25 февраля 2019

Я успешно установил свой тестовый сайт и сейчас пытаюсь изменить 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 %}
...