@Vladisus

Прямой GET? Как это сделать?

У меня есть view, что обрабатывает ListView и форму, он использует GET и фильтруют посты в зависимости от их tag'а и выводит их на той же странице. Вот:
class AllView(AjaxListView):

  context_object_name = 'smth'
  template_name = 'blog/all_things.html'
  page_template = 'blog/things.html'

  def get_queryset(self):
      form = TagForm(self.request.GET)
      if form.is_valid():
          self.tag_name = (form.cleaned_data['tag']).lower()
          return self.send_results(self.tag_name)
      else:
          self.tag_name = "All"
          return Fact.objects.all()

  def get_context_data(self, **kwargs):
      context = super(AllView, self).get_context_data(**kwargs)
      if 'TagForm' not in context:
          context['TagForm'] = TagForm()
      context['tag'] = self.tag_name
      return context

  def send_results(self, tag):
      return Fact.objects.filter(tags__slug=tag)


Сейчас, и хочу сделать только то же самое, но с простой ссылки. Например у меня есть <a>Food</a>
и я хочу с помощью GET пойти на ?tag=food. Я сделал очень глупо, но это работает:
URL:
url(r'^(?P<tag>[\w-]+)$', views.TagView, name='tag'),

View:
def TagView(request, tag):
# change this someday...
  return HttpResponseRedirect(reverse('blog:all') + '?tag={}'.format(tag))

Я понимаю, что это глупо, так есть ли нормальный способ сделать это?
  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
sim3x
@sim3x
Джанга сама парсит гет и создает словарь в реквесте

def asdf(request):
    print request.GET


в твоем случае
#urls
# url(r'^(?P<tag>[\w-]+)$', views.TagView, name='tag'),
url(r'^/$', views.TagView, name='tag'),


# views
     your_get_params_here = self.request.GET


А можно использовать форму

<form method=get>
  <input type=hidden name=tag value=Food>
  <input type=submit>

форму не руками писать, а применить миксин, конечно же

А как в темплейте все ето показать зависит от извращенности
Идеально - сделать через форму - у тебя все равно список параметров должен где-то в модели храниться. А значения модель можно использовать как list значений в форме
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы