Django get request делится на 3 ветки?
У меня есть класс списка статей (class ArticleListView(View):). В этом классе я хочу иметь 1 функцию get с 3 различными запросами. Первый используется для поиска статей Второй для возврата случайной ссылки на статью Третий возвращает список статей
Я могу сделать 2 разных запроса get (all и search), но не могу добавить третий. Возможно ли это технически и если да, то кто мне нужен для случайной страницы и какая часть моей функции get неверна? мой код : class ArticleListView(View): template_name = "wiki/article_list.html"
def get(self, request) :
strval = request.GET.keys()
if request.GET.get('search') :
# Simple title-only search
# objects = Post.objects.filter(title__contains=strval).select_related().order_by('-updated_at')[:10]
# Multi-field search
# __icontains for case-insensitive search
query = Q(title__icontains=strval)
query.add(Q(text__icontains=strval), Q.OR)
article_list = Article.objects.filter(query).select_related().order_by('-updated_at')[:10]
elif request.GET.get('random'):
# find the number of article abject
numberOfArticle = Article.objects.all().count()
# find a random number from 1 to number of articles
randomPK = random.randint(1, numberOfArticle)
# filter article list object base on primary key ( pass that random number)
#Item.objects.all()[0].type_id
article_list = Article.objects.get(pk=randomPK)
else :
article_list = Article.objects.all().order_by('-updated_at')[:10]
# Augment the article_list
for obj in article_list:
obj.natural_updated = naturaltime(obj.updated_at)
ctx = {'article_list' : article_list, 'search': strval, 'random':strval}
return render(request, self.template_name, ctx)
моя старая функция, которая работает для списка всех статей и поиска:
class ArticleListView(View):
template_name = "wiki/article_list.html"
def get(self, request) :
strval = request.GET.get("search", False)
if strval :
# Simple title-only search
# Multi-field search
# __icontains for case-insensitive search
query = Q(title__icontains=strval)
query.add(Q(text__icontains=strval), Q.OR)
article_list = Article.objects.filter(query).select_related().order_by('-updated_at')[:10]
else :
article_list = Article.objects.all().order_by('-updated_at')[:10]
# Augment the post_list
for obj in article_list:
obj.natural_updated = naturaltime(obj.updated_at)
ctx = {'post_list' : article_list, 'search': strval}
return render(request, self.template_name, ctx)
также ссылки на поиск (который является формой) и ссылка на получение всех статей на языке шаблона Django
search link :
<form>
<input type="text" placeholder="Search.." name="search"
{% if search %} value="{{ search }}" {% endif %}>
<a href="{% url 'wiki:all' %}"><i class="fa fa-undo"></i></a>
</form>
Ссылка на всю статью :
<a href="{% url 'wiki:article_detail' article.id %}">{{ article.title }}</a>
I want to click on link and get a random article link in main page.
Спасибо