prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Article archive should just list tags that are used
  IMO, tags that are not used in any articles should not be listed in the tagcloud.
  
  Feels unnecessary to have them there.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `apps/article/views.py`
  Content:
  ```
  1 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
  2 from django.db.models import Count
  3 from django.http import HttpResponse
  4 from django.shortcuts import render_to_response, get_object_or_404
  5 from django.template import Template, Context, loader, RequestContext
  6 from models import Article, Tag, ArticleTag
  7 import random
  8 
  9 def index(request):
  10     # Featured
  11     featured = Article.objects.filter(featured=True).order_by('-id')[:1]
  12     
  13     # Siste 4 nyheter
  14     latestNews = Article.objects.filter(featured=False).order_by('-id')[:4]
  15     
  16     i = 0
  17     for latest in latestNews:
  18         if (i % 2 == 0):
  19             latest.i = 0
  20         else:
  21             latest.i = 1
  22         i += 1
  23 
  24     return render_to_response('article/index.html', {'featured' : featured[0], 'latest': latestNews}, context_instance=RequestContext(request))
  25 
  26 def archive(request, name=None, slug=None, year=None, month=None):
  27     """
  28     Parameters
  29     ----------
  30     name:
  31         Tag name
  32     slug:
  33         Tag slug
  34     year:
  35         Article year (published_date)
  36     month:
  37         Article month (published_date), most likely in norwegian written format.
  38     """
  39 
  40     articles = Article.objects.all().order_by('-published_date')
  41 
  42     month_strings = {
  43         '1': u'Januar',
  44         '2': u'Februar',
  45         '3': u'Mars',
  46         '4': u'April',
  47         '5': u'Mai',
  48         '6': u'Juni',
  49         '7': u'Juli',
  50         '8': u'August',
  51         '9': u'September',
  52         '10': u'Oktober',
  53         '11': u'November',
  54         '12': u'Desember',
  55     }
  56 
  57     rev_month_strings = dict((v,k) for k,v in month_strings.iteritems())
  58 
  59     # HERE BE DRAGONS
  60     # TODO: Fix all these for loops...
  61     # --------------------------------
  62     # For creating the date filters.
  63     dates = {}
  64     for article in articles:
  65         d_year = str(article.published_date.year)
  66         d_month = str(article.published_date.month)
  67         if d_year not in dates:
  68             dates[d_year] = []
  69         for y in dates:
  70             if d_year == y:
  71                 if month_strings[d_month] not in dates[d_year]:
  72                     dates[d_year].append(month_strings[d_month])
  73     # Now sort months
  74     for year in dates:
  75         sorted_months = ['' for x in range(1, 13)]
  76         for month in dates[year]:
  77             sorted_months[int(rev_month_strings[month])-1] = month
  78         remove_these = []
  79         for n, m in enumerate(sorted_months):
  80             if m == '':
  81                 remove_these.append(n)
  82         for i in reversed(remove_these):
  83             del sorted_months[i]
  84         dates[year] = sorted_months
  85 
  86     # If we're filtering by tag
  87     if name:
  88         filtered = []
  89         for article in articles:
  90             for tag in article.tags:
  91                 if name == tag.name:
  92                     filtered.append(article)
  93         articles = filtered
  94 
  95     # If we're filtering by year
  96     if 'year' in request.path:
  97         filtered = []
  98         # If we're filtering by year and month
  99         if 'month' in request.path:
  100             month = rev_month_strings[month]
  101             for article in articles:
  102                 if article.published_date.year == int(year) and article.published_date.month == int(month):
  103                     filtered.append(article)
  104         # If we're filtering by year, but not month
  105         else:
  106             for article in articles:
  107                 if article.published_date.year == int(year):
  108                     filtered.append(article)
  109         articles = filtered
  110 
  111     # Get the 30 most used tags, then randomize them
  112     tags = list(Tag.objects.all())
  113     tags.sort(key=lambda x: x.frequency, reverse=True)
  114     tags = tags[:30]
  115     random.shuffle(tags)
  116     # Get max frequency of tags. This is used for relative sizing in the tag cloud.
  117     try:
  118         max_tag_frequency = max([x.frequency for x in tags])
  119     except ValueError:
  120         max_tag_frequency = 1
  121 
  122     # Paginator
  123     # Shows 10 articles per page. Note that these are also filtered beforehand by tag or date.
  124     paginator = Paginator(articles, 10)
  125     page = request.GET.get('page')
  126     try:
  127         articles = paginator.page(page)
  128     except PageNotAnInteger:
  129         # Deliver first page.
  130         articles = paginator.page(1)
  131     except EmptyPage:
  132         # Deliver last page.
  133         articles = paginator.page(paginator.num_pages)
  134 
  135     return render_to_response('article/archive.html', {'articles': articles, 'tags': tags, 'max_tag_frequency': max_tag_frequency, 'dates': dates } ,context_instance=RequestContext(request))
  136 
  137 def archive_tag(request, name, slug):
  138     return archive(request, name=name, slug=slug)
  139 
  140 def archive_year(request, year):
  141     return archive(request, year=year)
  142 
  143 def archive_month(request, year, month):
  144     return archive(request, year=year, month=month)
  145 
  146 def details(request, article_id, article_slug):
  147 
  148     article = get_object_or_404(Article, pk=article_id)
  149 
  150     if article.changed_date != article.created_date:
  151         article.is_changed = True
  152     else:
  153         article.is_changed = False
  154 
  155     related_articles = Article.objects.filter(article_tags__tag__in=article.tags).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags', '-published_date').exclude(id=article.id)[:4]
  156 
  157     return render_to_response('article/details.html', {'article': article, 'related_articles': related_articles}, context_instance=RequestContext(request))
  158
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/apps/article/views.py b/apps/article/views.py
  --- a/apps/article/views.py
  +++ b/apps/article/views.py
  @@ -109,9 +109,8 @@
           articles = filtered
   
       # Get the 30 most used tags, then randomize them
  -    tags = list(Tag.objects.all())
  -    tags.sort(key=lambda x: x.frequency, reverse=True)
  -    tags = tags[:30]
  +    tags = Tag.objects.filter(article_tags__isnull=False).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags')
  +    tags = list(tags[:30])
       random.shuffle(tags)
       # Get max frequency of tags. This is used for relative sizing in the tag cloud.
       try:
  
verification_info: {"golden_diff": "diff --git a/apps/article/views.py b/apps/article/views.py\n--- a/apps/article/views.py\n+++ b/apps/article/views.py\n@@ -109,9 +109,8 @@\n         articles = filtered\n \n     # Get the 30 most used tags, then randomize them\n-    tags = list(Tag.objects.all())\n-    tags.sort(key=lambda x: x.frequency, reverse=True)\n-    tags = tags[:30]\n+    tags = Tag.objects.filter(article_tags__isnull=False).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags')\n+    tags = list(tags[:30])\n     random.shuffle(tags)\n     # Get max frequency of tags. This is used for relative sizing in the tag cloud.\n     try:\n", "issue": "Article archive should just list tags that are used\nIMO, tags that are not used in any articles should not be listed in the tagcloud.\n\nFeels unnecessary to have them there.\n\n", "before_files": [{"content": "from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage\nfrom django.db.models import Count\nfrom django.http import HttpResponse\nfrom django.shortcuts import render_to_response, get_object_or_404\nfrom django.template import Template, Context, loader, RequestContext\nfrom models import Article, Tag, ArticleTag\nimport random\n\ndef index(request):\n    # Featured\n    featured = Article.objects.filter(featured=True).order_by('-id')[:1]\n    \n    # Siste 4 nyheter\n    latestNews = Article.objects.filter(featured=False).order_by('-id')[:4]\n    \n    i = 0\n    for latest in latestNews:\n        if (i % 2 == 0):\n            latest.i = 0\n        else:\n            latest.i = 1\n        i += 1\n\n    return render_to_response('article/index.html', {'featured' : featured[0], 'latest': latestNews}, context_instance=RequestContext(request))\n\ndef archive(request, name=None, slug=None, year=None, month=None):\n    \"\"\"\n    Parameters\n    ----------\n    name:\n        Tag name\n    slug:\n        Tag slug\n    year:\n        Article year (published_date)\n    month:\n        Article month (published_date), most likely in norwegian written format.\n    \"\"\"\n\n    articles = Article.objects.all().order_by('-published_date')\n\n    month_strings = {\n        '1': u'Januar',\n        '2': u'Februar',\n        '3': u'Mars',\n        '4': u'April',\n        '5': u'Mai',\n        '6': u'Juni',\n        '7': u'Juli',\n        '8': u'August',\n        '9': u'September',\n        '10': u'Oktober',\n        '11': u'November',\n        '12': u'Desember',\n    }\n\n    rev_month_strings = dict((v,k) for k,v in month_strings.iteritems())\n\n    # HERE BE DRAGONS\n    # TODO: Fix all these for loops...\n    # --------------------------------\n    # For creating the date filters.\n    dates = {}\n    for article in articles:\n        d_year = str(article.published_date.year)\n        d_month = str(article.published_date.month)\n        if d_year not in dates:\n            dates[d_year] = []\n        for y in dates:\n            if d_year == y:\n                if month_strings[d_month] not in dates[d_year]:\n                    dates[d_year].append(month_strings[d_month])\n    # Now sort months\n    for year in dates:\n        sorted_months = ['' for x in range(1, 13)]\n        for month in dates[year]:\n            sorted_months[int(rev_month_strings[month])-1] = month\n        remove_these = []\n        for n, m in enumerate(sorted_months):\n            if m == '':\n                remove_these.append(n)\n        for i in reversed(remove_these):\n            del sorted_months[i]\n        dates[year] = sorted_months\n\n    # If we're filtering by tag\n    if name:\n        filtered = []\n        for article in articles:\n            for tag in article.tags:\n                if name == tag.name:\n                    filtered.append(article)\n        articles = filtered\n\n    # If we're filtering by year\n    if 'year' in request.path:\n        filtered = []\n        # If we're filtering by year and month\n        if 'month' in request.path:\n            month = rev_month_strings[month]\n            for article in articles:\n                if article.published_date.year == int(year) and article.published_date.month == int(month):\n                    filtered.append(article)\n        # If we're filtering by year, but not month\n        else:\n            for article in articles:\n                if article.published_date.year == int(year):\n                    filtered.append(article)\n        articles = filtered\n\n    # Get the 30 most used tags, then randomize them\n    tags = list(Tag.objects.all())\n    tags.sort(key=lambda x: x.frequency, reverse=True)\n    tags = tags[:30]\n    random.shuffle(tags)\n    # Get max frequency of tags. This is used for relative sizing in the tag cloud.\n    try:\n        max_tag_frequency = max([x.frequency for x in tags])\n    except ValueError:\n        max_tag_frequency = 1\n\n    # Paginator\n    # Shows 10 articles per page. Note that these are also filtered beforehand by tag or date.\n    paginator = Paginator(articles, 10)\n    page = request.GET.get('page')\n    try:\n        articles = paginator.page(page)\n    except PageNotAnInteger:\n        # Deliver first page.\n        articles = paginator.page(1)\n    except EmptyPage:\n        # Deliver last page.\n        articles = paginator.page(paginator.num_pages)\n\n    return render_to_response('article/archive.html', {'articles': articles, 'tags': tags, 'max_tag_frequency': max_tag_frequency, 'dates': dates } ,context_instance=RequestContext(request))\n\ndef archive_tag(request, name, slug):\n    return archive(request, name=name, slug=slug)\n\ndef archive_year(request, year):\n    return archive(request, year=year)\n\ndef archive_month(request, year, month):\n    return archive(request, year=year, month=month)\n\ndef details(request, article_id, article_slug):\n\n    article = get_object_or_404(Article, pk=article_id)\n\n    if article.changed_date != article.created_date:\n        article.is_changed = True\n    else:\n        article.is_changed = False\n\n    related_articles = Article.objects.filter(article_tags__tag__in=article.tags).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags', '-published_date').exclude(id=article.id)[:4]\n\n    return render_to_response('article/details.html', {'article': article, 'related_articles': related_articles}, context_instance=RequestContext(request))\n", "path": "apps/article/views.py"}], "after_files": [{"content": "from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage\nfrom django.db.models import Count\nfrom django.http import HttpResponse\nfrom django.shortcuts import render_to_response, get_object_or_404\nfrom django.template import Template, Context, loader, RequestContext\nfrom models import Article, Tag, ArticleTag\nimport random\n\ndef index(request):\n    # Featured\n    featured = Article.objects.filter(featured=True).order_by('-id')[:1]\n    \n    # Siste 4 nyheter\n    latestNews = Article.objects.filter(featured=False).order_by('-id')[:4]\n    \n    i = 0\n    for latest in latestNews:\n        if (i % 2 == 0):\n            latest.i = 0\n        else:\n            latest.i = 1\n        i += 1\n\n    return render_to_response('article/index.html', {'featured' : featured[0], 'latest': latestNews}, context_instance=RequestContext(request))\n\ndef archive(request, name=None, slug=None, year=None, month=None):\n    \"\"\"\n    Parameters\n    ----------\n    name:\n        Tag name\n    slug:\n        Tag slug\n    year:\n        Article year (published_date)\n    month:\n        Article month (published_date), most likely in norwegian written format.\n    \"\"\"\n\n    articles = Article.objects.all().order_by('-published_date')\n\n    month_strings = {\n        '1': u'Januar',\n        '2': u'Februar',\n        '3': u'Mars',\n        '4': u'April',\n        '5': u'Mai',\n        '6': u'Juni',\n        '7': u'Juli',\n        '8': u'August',\n        '9': u'September',\n        '10': u'Oktober',\n        '11': u'November',\n        '12': u'Desember',\n    }\n\n    rev_month_strings = dict((v,k) for k,v in month_strings.iteritems())\n\n    # HERE BE DRAGONS\n    # TODO: Fix all these for loops...\n    # --------------------------------\n    # For creating the date filters.\n    dates = {}\n    for article in articles:\n        d_year = str(article.published_date.year)\n        d_month = str(article.published_date.month)\n        if d_year not in dates:\n            dates[d_year] = []\n        for y in dates:\n            if d_year == y:\n                if month_strings[d_month] not in dates[d_year]:\n                    dates[d_year].append(month_strings[d_month])\n    # Now sort months\n    for year in dates:\n        sorted_months = ['' for x in range(1, 13)]\n        for month in dates[year]:\n            sorted_months[int(rev_month_strings[month])-1] = month\n        remove_these = []\n        for n, m in enumerate(sorted_months):\n            if m == '':\n                remove_these.append(n)\n        for i in reversed(remove_these):\n            del sorted_months[i]\n        dates[year] = sorted_months\n\n    # If we're filtering by tag\n    if name:\n        filtered = []\n        for article in articles:\n            for tag in article.tags:\n                if name == tag.name:\n                    filtered.append(article)\n        articles = filtered\n\n    # If we're filtering by year\n    if 'year' in request.path:\n        filtered = []\n        # If we're filtering by year and month\n        if 'month' in request.path:\n            month = rev_month_strings[month]\n            for article in articles:\n                if article.published_date.year == int(year) and article.published_date.month == int(month):\n                    filtered.append(article)\n        # If we're filtering by year, but not month\n        else:\n            for article in articles:\n                if article.published_date.year == int(year):\n                    filtered.append(article)\n        articles = filtered\n\n    # Get the 30 most used tags, then randomize them\n    tags = Tag.objects.filter(article_tags__isnull=False).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags')\n    tags = list(tags[:30])\n    random.shuffle(tags)\n    # Get max frequency of tags. This is used for relative sizing in the tag cloud.\n    try:\n        max_tag_frequency = max([x.frequency for x in tags])\n    except ValueError:\n        max_tag_frequency = 1\n\n    # Paginator\n    # Shows 10 articles per page. Note that these are also filtered beforehand by tag or date.\n    paginator = Paginator(articles, 10)\n    page = request.GET.get('page')\n    try:\n        articles = paginator.page(page)\n    except PageNotAnInteger:\n        # Deliver first page.\n        articles = paginator.page(1)\n    except EmptyPage:\n        # Deliver last page.\n        articles = paginator.page(paginator.num_pages)\n\n    return render_to_response('article/archive.html', {'articles': articles, 'tags': tags, 'max_tag_frequency': max_tag_frequency, 'dates': dates } ,context_instance=RequestContext(request))\n\ndef archive_tag(request, name, slug):\n    return archive(request, name=name, slug=slug)\n\ndef archive_year(request, year):\n    return archive(request, year=year)\n\ndef archive_month(request, year, month):\n    return archive(request, year=year, month=month)\n\ndef details(request, article_id, article_slug):\n\n    article = get_object_or_404(Article, pk=article_id)\n\n    if article.changed_date != article.created_date:\n        article.is_changed = True\n    else:\n        article.is_changed = False\n\n    related_articles = Article.objects.filter(article_tags__tag__in=article.tags).distinct().annotate(num_tags=Count('article_tags__tag')).order_by('-num_tags', '-published_date').exclude(id=article.id)[:4]\n\n    return render_to_response('article/details.html', {'article': article, 'related_articles': related_articles}, context_instance=RequestContext(request))\n", "path": "apps/article/views.py"}]}