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