2016-06-01 3 views
-1

Скажем, у меня есть следующий бессмысленный пример вид:Pass <input> значение зрения Джанго

def foo(request, input): 
    return HttpResponse() 

и в шаблоне у меня есть форма:

<form method="get" action="{% url 'foo' ??? %}"> 
    <input id="myinput" type="text" name="myinput"> 

    ... 

</form> 

Наконец, я следующий URL-адрес в мой URL-адрес:

urlpatterns = [ 
    url(r'^foo/(.+)/', views.foo, name='foo'), 
] 

Что я хотел бы сделать, это передать значение, введенное пользователем во вход с помощью th e id от #myinput до foo() функция просмотра. Другими словами, вы должны ввести bar в html-ввод, и при отправке формы он доставит вас до foo/bar/.

Я знаю, что в пределах foo я мог легко получить доступ к значению ввода с помощью request.GET['myinput'], но я хочу, чтобы он отображался и в URL-адресе.

Похоже, что это должна быть довольно распространенная задача, но я пока не смог найти решение. Мы ценим любые предложения. Мой монстр из Франкенштейна первого сайта Django почти завершен, и это одна из последних вещей, которые мне не хватает.

+0

Вы уверены, что хотите это сделать? Вам нужно будет определить представление с очень общим регулярным выражением для их пересылки, и это помешает вам помещать практически что-либо еще под 'foo /'. –

+0

Вы прямо из курса, но мой фактический URL-адрес совсем другой. Думаю, я немного упростил свой пример. Это действительно будет что-то вроде 'items/search/nameofitem', где' nameofitem' - это часть, которую я хочу передать в представление из ввода. – elethan

+0

Какую проблему вы пытаетесь решить с этим? – marcusshep

ответ

2

Источник моего недопонимания

Хотя я не делал это ясно, в попытке упростить мой пример и избежать использования приложения-зависимого кода, мой случай использования простого вид поиска. Представление было на самом деле одним из первых взглядов, которые я написал в начале моего путешествия в Django, и я ошибочно был POST в моих данных вместо GET. Это делало так, что если бы я искал элемент foo, он перенесет меня на страницу подробностей для foo, но URL-адрес будет mysite/search/ (т. Е. Поисковый запрос не включен в URL-адрес, хотя он включен в запрос), и я не могу вернуться к этим результатам поиска, посетив url mysite/search/.

В то время как я использовал запрос GET в своем примере с игрушкой в ​​этом вопросе, я не понимал, что использовал в своем приложении POST, и что с некоторой незначительной настройкой я могу получить функциональность, которую я хочу бесплатно очень легко. Я знаю, что все это очень очевидно для опытных и даже промежуточных разработчиков веб-сайтов, но для кого-то, начинающего с нуля без опыта работы в Интернете или cs, такие вещи, как HTTP, могут быть немного запутанными. По крайней мере, для меня это так. Большое спасибо @ Two-Bit Alchemist за то, что объяснил это так, как я могу понять.

Применяя все это к моей игрушечной например

Я бы избавиться от переданного параметра, на мой взгляд:

def foo(request): 

    # If I want to do something with the search query, I can access it with 
    # request.GET['search_query'] 

    return HttpResponse() 

изменения моя форма в моем шаблоне:

<form method="get" action="{% url 'foo' %}"> 
    <input id="myinput" type="text" name="search_query"> 

    ... 

</form> 

и измените мой url на:

urlpatterns = [ 
    url(r'^foo/search/', views.foo, name='foo'), 
] 

As @ Two-Bit Alchemist сказал: «Остальное будет, как магия». Если пользователь вводит bar на вход и отправляет форму, они будут отправлены в foo/search/?search_query=bar. Это то, что я искал.

Смежные вопросы