Да, вы можете изменить имя вашего входящего параметра и URL:
# Page for a single label.
path('labels/<str:name>/', views.label, name='label'),
def label(request, name):
try:
label = Label.objects.get(name=name)
except Label.MultipleObjectsReturned:
label = None # TODO have a strategy
Обратите внимание, что, поскольку вы отключаете неуникальный параметр, вы можете столкнуться.Кроме того, у вас есть очень открытый CharField, который может включать пробелы, косые черты и т. Д. Лучше было бы иметь явный «SlugField» для генерации этого слага:
class Label(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField()
Затем вы можете установить этот SlugFieldдля предварительного заполнения в вашем админ-файле ( docs ):
class LabelAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("name",)}
Наконец, я бы настоятельно рекомендовал использовать DetailView для этого, где вы получите много предварительно настроенных функций для "бесплатно"":
from django.views.generic.detail import DetailView
class LabelDetailView(DetailView):
queryset = Label.objects.all()
slug_field = 'slug' # Or Name, Or Id
slug_url_kwargs = 'slug' # Or name or label_id
Подробнее о Подробном представлении на основе классов