Как добавить slug в тег url шаблона html в Django?

Я хочу иметь путь URL следующим образом: www.example.com/html/html-introduction.

Теперь здесь есть два слизня html и html-introduction. когда я обычно ввожу слизень в url input, он работает, но когда я передаю в кнопку в моем html шаблоне, он не работает и показывает эту ошибку

Reverse for 'programming-languages-category' with keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['getting\\-started/(?P<prglangcat_slug>[-a-zA-Z0-9_]+)/$']

вот мой шаблон, где у меня есть кнопка, в которую я хочу передать slug

<div>
    {% for p in prglangcat %}
      <a href="{% url 'base:programming-languages-category' slug=p.prglangcat_slug.slug=p.prg_slug.slug %}" >
        <h4>{{p.title}}</h4>
      </a>
    {% endfor %}
</div>

views.py

def index(request):
    prglangcat = ProgrammingLanguagesCategory.objects.all()
    context = {
        'prglangcat': prglangcat
    }
    return render(request, 'base/index.html', context)

def gettingStarted(request):
    prglangcat = ProgrammingLanguagesCategory.objects.all()
    context = {
        'prglangcat': prglangcat
    }
    return render(request, 'base/getting-started.html', context)

def programmingLanguageCategoryDetail(request, prglangcat_slug):
    prglangcat = ProgrammingLanguagesCategory.objects.get(slug=prglangcat_slug)

    context = {

        'prglangcat': prglangcat
    }
    return render(request, 'base/language-category.html', context)

def programmingLanguageTutorial(request, prglangcat_slug, prg_slug ):
    prglangcat = ProgrammingLanguagesCategory.objects.get(slug=prglangcat_slug)
    prglangtut = ProgrammingLanguageTutorial.objects.get(slug=prg_slug, prglangcat=prglangcat)

    context = {

        'prglangtut': prglangtut,
        'prglangcat': prglangcat
    }
    return render(request, 'base/tutorial-page.html', context)

urls.py

app_name = 'base'

urlpatterns = [
        path('', views.index, name="index"),
        path('getting-started/', views.gettingStarted, name="getting-started"),
        path('getting-started/<slug:prglangcat_slug>/', views.programmingLanguageCategoryDetail, name="programming-languages-category"),
        path('getting-started/<slug:prglangcat_slug>/<slug:prg_slug>/', views.programmingLanguageTutorial, name="tutorial-page"),
]

models.py

class ProgrammingLanguagesCategory(models.Model):
    title = models.CharField(max_length=100)
    icon = models.ImageField(upload_to='programming-category', default="default.jpg")
    description = models.TextField(default="Learn ...")
    slug = models.SlugField(unique=True)

    def get_absolute_url(self):
        return reverse('base:programming-languages-category', args=[self.slug])

    def __str__(self):
        return self.title

class ProgrammingLanguageTutorial(models.Model):
    prglangcat = models.ForeignKey(ProgrammingLanguagesCategory, on_delete=models.CASCADE, null=True)
    creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    slug = models.SlugField(unique=True)
    title = models.CharField(max_length=10000)
    description = models.TextField(null=True)
    image = models.ImageField(upload_to='Tutorial Image', null=True, blank=True)
    code_snippet = models.CharField(max_length=1000000000, null=True, blank=True)
    video_url = models.URLField(null=True, blank=True)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('base:tutorial-page', args=[self.slug])

В своем шаблоне вы используете

<a href="{% url 'base:programming-languages-category' slug=p.prglangcat_slug.slug=p.prg_slug.slug %}" >

Урл programming-languages-category принимает только slug в качестве аргумента URL, поэтому, вероятно, вы просто хотите сделать следующее:

<a href="{% url 'base:programming-languages-category' slug=p.prglangcat.slug %}" >

Обратите внимание, что _ в slug=p.prglangcat_slug был заменен на ., так как вы хотите просмотреть отношение prglangcat и получить slug из модели ProgrammingLanguagesCategory, и мы используем . для этого в шаблоне.

Вернуться на верх