'how to add slug to html template url tag in Django?

I want to have a URL path like this: www.example.com/html/html-introduction.

Now there are two slugs here html and html-introduction. when i maually type in the slug in the url input, it works, but when i pass into a button in my html template it does not work and it shows this error

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

this is my template where i have the button i want to pass the slug into

<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])


Solution 1:[1]

In your template you are using

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

The programming-languages-category url only takes slug as a URL argument, so you probably just want to do the following:

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

Note that the _ in slug=p.prglangcat_slug has been replaced with a . as you want to lookup the prglangcat relation and get the slug from the ProgrammingLanguagesCategory model, and we use . to do that in the template.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 iri