X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/0a2b0a2e41dade79cbe655ff1f123696c2a53149..13bee2f2e6aea2d936909861f3ab60bb09821a60:/forum/views/readers.py diff --git a/forum/views/readers.py b/forum/views/readers.py index e43567d..9a6f66e 100644 --- a/forum/views/readers.py +++ b/forum/views/readers.py @@ -6,6 +6,7 @@ from forum import settings as django_settings from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponsePermanentRedirect from django.core.paginator import Paginator, EmptyPage, InvalidPage +from django.core.exceptions import ObjectDoesNotExist from django.template import RequestContext from django import template from django.utils.html import * @@ -77,7 +78,6 @@ def feed(request): settings.APP_TITLE + _(' - ')+ _('latest questions'), settings.APP_DESCRIPTION)(request) - @decorators.render('index.html') def index(request): paginator_context = QuestionListPaginatorContext() @@ -102,8 +102,13 @@ def questions(request): @decorators.render('questions.html') def tag(request, tag): + questions = Question.objects.filter(tags__name=unquote(tag)) + + if not questions: + raise Http404 + return question_list(request, - Question.objects.filter(tags__name=unquote(tag)), + questions, mark_safe(_('questions tagged %(tag)s') % {'tag': tag}), None, mark_safe(_('Questions Tagged With %(tag)s') % {'tag': tag}), @@ -168,7 +173,7 @@ def question_list(request, initial, if req_params: req_params = '&' + req_params - feed_url = mark_safe(request.path + "?type=rss" + req_params) + feed_url = mark_safe(escape(request.path + "?type=rss" + req_params)) return pagination.paginated(request, ('questions', paginator_context or QuestionListPaginatorContext()), { "questions" : questions.distinct(), @@ -193,7 +198,7 @@ def search(request): return HttpResponseRedirect(reverse('tags') + '?q=%s' % urlquote(keywords.strip())) elif search_type == "user": return HttpResponseRedirect(reverse('users') + '?q=%s' % urlquote(keywords.strip())) - elif search_type == "question": + else: return question_search(request, keywords) else: return render_to_response("search.html", context_instance=RequestContext(request)) @@ -224,7 +229,7 @@ def tags(request): if request.method == "GET": stag = request.GET.get("q", "").strip() if stag: - tags = tags.filter(name__contains=stag) + tags = tags.filter(name__icontains=stag) return pagination.paginated(request, ('tags', TagPaginatorContext()), { "tags" : tags, @@ -244,7 +249,7 @@ def update_question_view_times(request, question): request.session['last_seen_in_question'][question.id] = datetime.datetime.now() -def match_question_slug(slug): +def match_question_slug(id, slug): slug_words = slug.split('-') qs = Question.objects.filter(title__istartswith=slug_words[0]) @@ -268,7 +273,7 @@ def answer_redirect(request, answer): else: raise Http404() - count = answer.question.answers.filter(Q(marked=True) | filter).count() + count = answer.question.answers.filter(Q(marked=True) | filter).exclude(state_string="(deleted)").count() pagesize = pc.pagesize(request) page = count / pagesize @@ -288,7 +293,7 @@ def question(request, id, slug='', answer=None): question = Question.objects.get(id=id) except: if slug: - question = match_question_slug(slug) + question = match_question_slug(id, slug) if question is not None: return HttpResponseRedirect(question.get_absolute_url()) @@ -315,9 +320,9 @@ def question(request, id, slug='', answer=None): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: - answer_form = AnswerForm(question, request.POST) + answer_form = AnswerForm(request.POST, user=request.user) else: - answer_form = AnswerForm(question) + answer_form = AnswerForm(user=request.user) answers = request.user.get_visible_answers(question)