Как передать дополнительные аргументы для представления функции как URL в Django? - PullRequest
2 голосов
/ 29 июня 2011

У меня есть некоторые данные, которые я хотел бы передать в шаблон HTML, используя функцию render_to_response. Так что обычно я буду делать что-то вроде:

return render_to_response('template.html', {'arg1':arg1,'arg2': arg2}, context_instance=RequestContext(request))

Однако я хочу создать ссылку, которая ведет на эту страницу, а не просто перейти на нее. Аргументы - это списки данных, используемых для создания графиков, а не маленьких, таких как годы, цифры или отдельные слова, поэтому я не хочу, чтобы они отображались в URL-адресе в шаблоне имени следующим образом:

urlpatterns = patterns('',
    url(r'^archive/(\d{4})/$', archive
)  

Есть ли способ передать дополнительные аргументы в функцию views и сгенерировать URL-ссылку без отображения дополнительных аргументов в URL-адресе?

Я уже знаю, что вы можете передать дополнительные аргументы, подобные этому

urlpatterns = patterns('blog.views',
    (r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
)

Но это не то, что я хочу, так как я не хочу, чтобы аргументы были жестко закодированы - они не остаются постоянными и представляют собой данные, генерируемые другим кодом.

Резюме: Как я могу создать ссылку, которая выполняет render_to_response, но только после того, как вы щелкнете по ней?

1 Ответ

0 голосов
/ 29 июня 2011

Два варианта:

  1. Если вам не нужны какие-либо данные в URL, вы можете отправить запрос POST и получить к нему доступ с помощью request.POST, см. соответствующие документы. Недостатком запросов POST является то, что браузер предупредит вас об обновлении страницы, и на нее трудно сослаться.

  2. Лучшим подходом было бы создание модели, содержащей все необходимые данные.

Например:

class Data(models.Model):
    data1 = models.IntegerField()
    data2 = models.IntegerField()
    data3 = models.IntegerField()

Затем есть одно представление, которое берет все данные из запроса POST и генерирует URL, который выглядит как /dataview/1. Таким образом, у вас есть URL-адрес, который можно использовать для получения данных из вашей модели Data, но нет данных, закодированных в URL-адресе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...