def match_question_slug(id, slug): slug_words = slug.split('-') qs = Question.objects.filter(title__istartswith=slug_words[0]) for q in qs: if slug == urlquote(slugify(q.title)): return q return None
def question(request, id, slug='', answer=None): try: question = Question.objects.get(id=id) except: if slug: question = match_question_slug(id, slug) if question is not None: return HttpResponseRedirect(question.get_absolute_url()) raise Http404() if question.nis.deleted and not request.user.can_view_deleted_post(question): raise Http404 if request.GET.get('type', None) == 'rss': return RssAnswerFeed(request, question, include_comments=request.GET.get('comments', None) == 'yes')(request) if answer: answer = get_object_or_404(Answer, id=answer) if (question.nis.deleted and not request.user.can_view_deleted_post(question)) or answer.question != question: raise Http404 if answer.marked: return HttpResponsePermanentRedirect(question.get_absolute_url()) return answer_redirect(request, answer) if settings.FORCE_SINGLE_URL and (slug != slugify(question.title)): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: answer_form = AnswerForm(question, request.POST) else: answer_form = AnswerForm(question) answers = request.user.get_visible_answers(question) update_question_view_times(request, question) if request.user.is_authenticated(): try: subscription = QuestionSubscription.objects.get(question=question, user=request.user) except: subscription = False else: subscription = False return pagination.paginated(request, ('answers', AnswerPaginatorContext()), { "question" : question, "answer" : answer_form, "answers" : answers, "similar_questions" : question.get_related_questions(), "subscription": subscription, })
def url_getter(vu): try: return reverse(fn.__name__, kwargs={'id': vu.id, 'slug': slugify(vu.username)}) except NoReverseMatch: return reverse(fn.__name__, kwargs={'id': vu.id})
ui.register(ui.USER_MENU, ui.UserMenuItem( label=_("edit profile"), url=lambda u, c: reverse('edit_user', kwargs={'id': c['user'].id}), span_attrs={'class': 'user-edit'}, weight=0 ), ui.UserMenuItem( label=_("authentication settings"), url=lambda u, c: reverse('user_authsettings', kwargs={'id': c['user'].id}), span_attrs={'class': 'user-auth'}, weight=100 ), ui.UserMenuItem( label=_("email notification settings"), url=lambda u, c: reverse('user_subscriptions', kwargs={'id': c['user'].id, 'slug': slugify(c['user'].username)}), span_attrs={'class': 'user-subscriptions'}, weight=200 ), ui.UserMenuItem( label=_("other preferences"), url=lambda u, c: reverse('user_preferences', kwargs={'id': c['user'].id, 'slug': slugify(c['user'].username)}), weight=200 ), ModerationMenuGroup(_("Moderation tools"), items=( ui.UserMenuItem( label=lambda u, c: c['user'].is_suspended() and _("withdraw suspension") or _("suspend this user"), url=lambda u, c: reverse('user_suspend', kwargs={'id': c['user'].id}), a_attrs=lambda u, c: {'class': c['user'].is_suspended() and 'ajax-command confirm' or 'ajax-command withprompt'}, render_to=lambda u: not u.is_superuser, ),