2015-08-10 3 views
0

Пользователь просматривает профиль другого пользователя на profile/userB/ и нажимает кнопку «Добавить друга».Django: Каков стандартный способ использования представления только для обработки формы?

Это представляет POST форму, содержащих как пользователь к create зрения в friends приложения (friends/create/), который обрабатывает данные, создает новый объект Friend и сохраняет его в базе данных. Флэш-сообщение устанавливается как обратная связь, и пользователь снова возвращается на profile/userB/.

Пользователь никогда не видит friend/create/.

Это действительно очевидно, и я делал это регулярно с CakePHP, но у меня возникли проблемы с изображением этого в Django. Я пытаюсь сохранить form.py отдельно, с отдельными шаблонами, окружающими формы (например, шаблон «Добавить друг друга» может быть включен в различные местоположения, включая форму и отправку, как указано выше). Я думаю, что это правильный способ сделать это?

Благодаря

+0

Так вы просто хотите, чтобы перенаправить обратно в 'профиля/USERB/'после обработки формы? – jproffitt

+0

В этом примере да, но ему также нужно будет перенаправить обратно в другое место, а не только профиль. Я действительно ищу шаблон или стандартный способ сделать это, я могу использовать в любом месте, так как я не видел этого в любом учебнике, и это было что-то, что было введено cakephp на раннем этапе – StringsOnFire

+0

. Я не уверен, что делает ваша форма 'выглядят, но так как« Добавить друг »- это просто кнопка, вы можете вместо этого использовать ajax. В этом случае ваша страница даже не обновляется, вы все равно можете нажать URL-адрес 'friend/create /', чтобы создать дружбу и получить ответ. –

ответ

0

Похоже, вы даже не нужна форма, и нет необходимости представлять POST. Вместо определения своего адреса, как friend/create/, использовать что-то вроде этого:

url(r'^create-friendship/(?P<user_id>\d+)/$', 'create_friendship', name='create-friendship'), 

Затем вы определяете Add Friend как ссылка (но вы должны сделать это как кнопку для пользовательского опыта), примерно так:

<a href="{% url 'app:create-friendship' userB.id %}?from={{ request.path|urlencode }}">Add friend</a> 

Обратите внимание, что в конце ссылки добавлен параметр GETfrom, это текущий адрес, который вы передаете методу просмотра. Затем в создании вида:

def create_friendship(user_id): 
    # logic to build your friendship relationship between user_id and request.user 
    if request.GET.get('from'): 
     return HttpResponseRedirect(request.GET.get('from')) 
    else: 
     # return to some other urls 

Там нет «встроенных» способа сделать это в Джанго, но как только вы понимаете основы лучше, это должно стать очевидным.

пс: Для того, чтобы получить доступ к request переменной в шаблоне Django, вы должны включить процессор шаблонов, добавьте следующие строки в TEMPLATE_CONTEXT_PROCESSOR в настройках:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... 
    'django.core.context_processors.request', 
    # ... 
) 
+0

Могу ли я передать переменную контекста в представление назначения в перенаправлении? – StringsOnFire

+0

Я думаю, что могу использовать https: // docs.djangoproject.com/en/1.8/topics/http/shortcuts/#redirect – StringsOnFire