Не удается получить доступ к URL-адресу django (страница не найдена)

#django #url #django-models #django-urls

#джанго #URL-адрес #джанго-модели #django-url-адреса

Вопрос:

У меня есть такие модели, как эта :

 class Region(models.Model):  region_parent = models.ForeignKey(  "self", blank=True, null=True, on_delete=models.CASCADE)  name = models.CharField(max_length=255)  title = models.CharField(max_length=255)  description = RichTextField()  description_on_list = RichTextField(blank=True)  thumbnail = models.ImageField(  upload_to="thumbnail-region", blank=True, max_length=255)  sidebar = RichTextField(blank=True)  ad_manager = models.TextField(blank=True)  meta_keywords = models.TextField(blank=True)  logo_on_navbar = models.ImageField(  upload_to="logo-on-navbar/", blank=True, max_length=255)  display_on_navbar = models.BooleanField(default=True)  slug = models.SlugField(unique=True)  def get_absolute_url(self):  if self.region_parent is not None:  return reverse('vineyards:region', kwargs={'parent': self.region_parent.slug, 'region': self.slug})  else:  return reverse('vineyards:region-without-parent', kwargs={'region': self.slug})   class Vineyard(models.Model):  name = models.CharField(max_length=255)  text = RichTextField()  rating = models.FloatField()  custom_overlay = models.ImageField(  upload_to="custom-rating/", blank=True, max_length=255)  google_map = models.TextField()  wine_rg_url = models.URLField(blank=True)  wine_rg = models.CharField(max_length=255)  wines_url = models.URLField(blank=True)  wines = models.CharField(max_length=255)  size = models.CharField(max_length=255)  grapes = models.CharField(max_length=255)  owner_url = models.URLField(blank=True)  owner = models.CharField(max_length=255)  visits = models.CharField(max_length=255)  region = models.ForeignKey(Region, on_delete=models.CASCADE)  regions = models.ManyToManyField(  Region, blank=True, related_name="regions")  cover = models.ImageField(upload_to="vineyard/", max_length=255)  sidebar = RichTextField(blank=True)  ad_manager = models.TextField(blank=True)  meta_keywords = models.TextField(blank=True)  top_slider = models.BooleanField(default=False)  cover_slider = models.BooleanField(default=False)  hide_rating = models.BooleanField(default=False)  slug = models.SlugField(unique=True)  def get_absolute_url(self):  if self.region.region_parent is not None:  return reverse('vineyards:detail', kwargs={'parent': self.region.region_parent.slug, 'region': self.region.slug, 'slug': self.slug})  else:  return reverse('vineyards:detail-without-parent', kwargs={'region': self.region.slug, 'slug': self.slug})  

И это мое urls.py:

 app_name = 'vineyards' urlpatterns = [  path('lt;str:parentgt;/lt;str:regiongt;/lt;slug:sluggt;/form/',  rr_form, name="detail-form"),  path('lt;str:regiongt;/lt;slug:sluggt;/form/',  rr_form, name="detail-without-parent-form"),  path('lt;str:parentgt;/lt;str:regiongt;/', vineyard_region, name="region"),  path('lt;str:regiongt;/', vineyard_region, name="region-without-parent"),  path('lt;str:parentgt;/lt;str:regiongt;/lt;slug:sluggt;/',  vineyard_detail, name="detail"),  path('lt;str:regiongt;/lt;slug:sluggt;/',  vineyard_detail, name="detail-without-parent"), ]  

Проблема в том, что я не могу получить доступ к последним 2 путям (виноградники: детали, виноградники: детали без родителей). Я думаю, что проблема в порядке расположения URL-адресов. Я пробовал другой порядок, но в результате всегда работает только один или несколько URL-адресов, а не все.

Возможно ли иметь URL-адрес с таким же путем, как этот: slug/slug/ ? Или мне следует разделить URL-адрес на два разных файла? Есть какие-нибудь предложения?

Спасибо.

Ответ №1:

Ваши URL-адреса должны быть уникальными. Как иначе Джанго должен знать, какой путь использовать для запроса?

Если несколько путей соответствуют шаблону URL-адреса, Django будет использовать первый соответствующий путь.

Используйте уникальные шаблоны URL-адресов в своих путях. Например,

 #this is just an example, adjust as it makes sense by your app logic   path('parent/lt;str:parentgt;/lt;str:regiongt;/lt;slug:sluggt;/',  vineyard_detail, name="detail"),  path('detail/lt;str:regiongt;/lt;slug:sluggt;/',  vineyard_detail, name="detail-without-parent"),