I am currently trying to implement a tag system into my Django project. I am trying to add the tags within each post, and have a category on the right hand side that displays maybe 10-20 of the tags. I am trying to implement this into the feed view, but i am unsure of how to call the slug for each tag in order to do /posts/tag/feed. So once you click on a tag it will redirect to the slug of the tag. Which would make the tag clickable. I tried to follow the link below but it only shows how to do it with the class view.
https://godjango.com/33-tagging-with-django-taggit/
views.py
    def post_feed(request):
        if not request.user.is_staff or not request.user.is_superuser:
            raise Http404
            queryset_list = Post.objects.all()
            tags = Tag.objects.all()
            query = request.GET.get("q")
            if query:
                queryset_list = queryset_list.filter(
                Q(title__icontains=query)|
                Q(tags__icontains=query)|
                Q(description__icontains=query)|
                Q(user__first_name__icontains=query)|
                Q(user__last_name__icontains=query)
                ).distinct()
                paginator = Paginator(queryset_list, 5)
                page_request_var = "page"
                page = request.GET.get(page_request_var)
                try:
                    queryset = paginator.page(page)
                except PageNotAnInteger:
                    # If page is not an integer, deliver first page.
                    queryset = paginator.page(1)
                except EmptyPage:
                    # If page is out of range (e.g. 9999), deliver last page of results.
                    queryset = paginator.page(paginator.num_pages)
                    context = {
                    "object_list": queryset,
                    "title": "List",
                    "page_request_var": page_request_var,
                    }
        return render(request, "post_feed.html", context)
And here is my url
url(r'^tag/(?P<slug>[-\w]+)/$', post_feed, name='tagged'),
the Tag.objects.all() only pulls up the tags but doesnt request the slugs.
I am unsure of how to add this to my view without changing it.
from django.views.generic import DetailView, ListView
from taggit.models import Tag
from .models import Product
taggit view to add url and query slug:
class TagMixin(object):
    def get_context_data(self, kwargs):
        context = super(TagMixin, self).get_context_data(kwargs)
        context['tags'] = Tag.objects.all()
        return context
class ProductDetail(DetailView):
    template_name = 'product/detail.html'
    context_object_name = 'product'
    model = Product
class ProductIndex(TagMixin, ListView):
    template_name = 'product/index.html'
    model = Product
    paginate_by = '10'
    queryset = Product.objects.all()
    context_object_name = 'products'
class TagIndexView(TagMixin, ListView):
    template_name = 'product/index.html'
    model = Product
    paginate_by = '10'
    context_object_name = 'products'
    def get_queryset(self):
        return Product.objects.filter(tags__slug=self.kwargs.get('slug'))
I have been stuck on this a few days. Any advice would be helpful.
Here is my models.py, sorry had to format it this way to show up as the whole models code.
            from django.db import models
            from django.db.models import Count, QuerySet, F
            from django.utils import timezone
            from django.conf import settings
            from django.contrib.contenttypes.models import ContentType
            from django.core.urlresolvers import reverse
            from django.db.models.signals import pre_save
            from django.utils.text import slugify
            from markdown_deux import markdown
            from django.utils.safestring import mark_safe
            from taggit.managers import TaggableManager
            from comments.models import Comment
            def upload_location(instance, filename):
                return "%s/%s" %(instance.slug, filename)
            class Post(models.Model):
                user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1 )
                title = models.CharField(max_length=75)
                slug = models.SlugField(unique=True)
                image = models.ImageField(
                        upload_to=upload_location,
                        null=True,
                        blank=True,
                        width_field="width_field",
                        height_field="height_field")
                height_field = models.IntegerField(default=0)
                width_field = models.IntegerField(default=0)
                description = models.TextField()
                tags = TaggableManager()
                public = models.BooleanField(default=False)
                updated = models.DateTimeField(auto_now_add=False, auto_now=True)
                created = models.DateTimeField(auto_now_add=True, auto_now=False)
                def __str__(self):
                    return self.title
                def get_absolute_url(self):
                    return reverse("posts:detail", kwargs={"slug": self.slug})
                class Meta:
                    ordering = ["-created", "-updated" ]
                def get_markdown(self):
                    description = self.description
                    markdown_text = markdown(description)
                    return mark_safe(markdown_text)
                @property
                def comments(self):
                    instance = self
                    qs = Comment.objects.filter_by_instance(instance)
                    return qs
                @property
                def get_content_type(self):
                    instance = self
                    content_type = ContentType.objects.get_for_model(instance.__class__)
                    return content_type
            def create_slug(instance, new_slug=None):
                    slug = slugify(instance.title)
                    if new_slug is not None:
                        slug = new_slug
                    qs = Post.objects.filter(slug=slug).order_by("-id")
                    exists = qs.exists()
                    if exists:
                        new_slug = "%s-%s" %(slug, qs.first().id)
                        return create_slug(instance, new_slug=new_slug)
                    return slug
            def pre_save_post_receiver(sender, instance, *args, **kwargs):
                if not instance.slug:
                    instance.slug = create_slug(instance)
            pre_save.connect(pre_save_post_receiver, sender=Post)
here is my template
    <div class="row">
      <div class="col-sm-2">
         <div class="panel panel-primary">
          <div class="panel-heading">
            Tags
          </div>
          <div class="panel-body">
            <ul class="list-group">
              {% for tag in tags %}
                <li><a href="{% url 'tagged' tag.slug %}"></a></li>
              {% empty %}
                <li>No Tags</li>
              {% endfor %}
            </ul>
          </div>
        </div>
      </div>
    </div>
    <div class="container">
    <div class='col-sm-6 col-sm-offset-3'>
    <h1> Post Feed </h1>
    <form method='GET' action'' class='row'>
      <div class='col-sm-6'>
          <div class='input-group'>
              <input class='form-control' type='text' name='q' placeholder='Search posts' value='{{ request.GET.q }}'/>
              <span class='input-group-btn'>
              <input class= 'btn btn-default' type='submit' value='Search'/>
          </div>
      </div>
    </form>
    {% for obj in object_list %}
    <div class="row">
      <div class="col-sm-12">
        <div class="thumbnail">
          {% if obj.image %}
          <img src='{{ obj.image.url }}' class='img-responsive' />
          {% endif %}
          <div class="caption post-detail-item">
            <h3><a href='{{ obj.get_absolute_url }}'><strong>{{ obj.title }}</strong></a> <small>{{ obj.created|timesince }} ago</small>
            </h3>
            {% if obj.user.get_full_name %}<p>Poster: {{ obj.user.get_full_name }}</p>{% endif %}
            {{ obj.get_markdown|truncatechars_html:50 }}
            <p>Tags: {{ obj.tags|join:" | "|title }}</p>
            <p><a href="{{ obj.get_absolute_url }}" class="btn btn-primary" role="button">View</a></p>
          </div>
        </div>
      </div>
    </div>
    {% endfor %}
    <div class="pagination">
        <span class="step-links">
            {% if object_list.has_previous %}
                <a href="?{{ page_request_var }}={{ object_list.previous_page_number }}{% if request.GET.q %}&
                q={{ request.GET.q }}{% endif %}">previous</a>
            {% endif %}
            <span class="current">
                Page {{ object_list.number }} of {{ object_list.paginator.num_pages }}.
            </span>
            {% if object_list.has_next %}
                <a href="?{{ page_request_var }}={{ object_list.next_page_number }}&q={{ request.GET.q }}">next</a>
            {% endif %}
        </span>
    </div>
    <footer>
      <p class="pull-right"><a href="#">Back to top</a></p>
      <p>© 2016 Holms, Inc. · <a href='{% url "privacy" %}'>Privacy</a> · <a href="#">Terms</a></p>
    </footer>
    </div>
    {% endblock content %}
    </div>
 
    