Найти - Пользователи
Полная версия: передавать переменные из одной функции представления в другую
Начало » Django » передавать переменные из одной функции представления в другую
1 2
skill
Добрый день всем!) Как передавать переменные из одной функции представления в другую?
вот код (естественно не работающий):

это функция голосования (все ненужное убрано), она выполняется и редиректиться на фун-ию battle:

def vote(request,bat_id,user_id):
battle = Battle.objects.filter(id=bat_id)[0]
user = request.user
if int(user_id) == 1:
messageVote="Ваш голос отдан за {{battle.user1}}"
if int(user_id) == 2:
messageVote= "Ваш голос отдан за {{battle.user2}}"
return HttpResponseRedirect('/battle/%s/' % battle.id, {'messageVote':messageVote})
это файл urls.py

(r'^battle/(\d*)/$', 'mysite.views.battle',{'place':'battle'}),
это функция битвы (на которую происходил редирект):

def battle(request, bat_id,place, messageVote):
battle = Battle.objects.filter(id=bat_id)[0]
commentCount = Comment.objects.filter(battle=battle)
....
return render_to_response('battle/battle.html', {'battle':battle, 'user': user, 'place':place})
Нужно, чтобы из функции vote передавалось нужное сообщение (переменная messageVote) фун-ии battle. При этом другие функции при их вызове так же могут редиректиться на battle (зависит от выполнения функции и условия), не имея при этом переменой messageVote.
skill
Неужели никто не знает решения?
На другом форуме посоветовали в этом случае ввести новый класс
и хранить его объекты, потом их вызывать в шаблоне. Кто-нибудь может рассказать или навести на доки, как это сделать? Заранее спасибо.
Imposeren
Немного изврат, но если кроме редиректа других ветвений с возвратом чего-либо нет, то можнно просто делать
return battle(request, battle.id, 'battle', {'messageVote':messageVote})
Imposeren
И вообще конкретно для этой задачи лучше почитать про сообщения в джанго:
https://docs.djangoproject.com/en/1.3/ref/contrib/messages/
FishHook
skill
Настоятельно рекомендую отказаться от функций представления в пользу CBV.
https://docs.djangoproject.com/en/dev/topics/class-based-views/
Многие костыли станут не нужны.
FishHook
skill
Нужно, чтобы из функции vote передавалось нужное сообщение (переменная messageVote) фун-ии battle. При этом другие функции при их вызове так же могут редиректиться на battle (зависит от выполнения функции и условия), не имея при этом переменой messageVote.
def battle(request, bat_id,place, messageVote=None) ????
skill
Imposeren
И вообще конкретно для этой задачи лучше почитать про сообщения в джанго:
https://docs.djangoproject.com/en/1.3/r … /messages/
Вот, то что нужно=) буду читать, спасибо
FishHook
def battle(request, bat_id,place, messageVote=None) ????
Сейчас нет возможности проверить, но разве это будет работать при условии, что редирект из другой функции не будет включать в себя переменную messageVote? Разве не напишет - “нужно 3 аргумента, 2 подано”?
toxi-kb
skill
FishHook написал:

def battle(request, bat_id,place, messageVote=None) ????

Сейчас нет возможности проверить, но разве это будет работать при условии, что редирект из другой функции не будет включать в себя переменную messageVote? Разве не напишет - “нужно 3 аргумента, 2 подано”?
Насколько я понимаю - не напишет, если ничего не передано примет, что messageVote=None, по умолчанию.
skill
toxi-kb
skill
FishHook написал:

def battle(request, bat_id,place, messageVote=None) ????

Сейчас нет возможности проверить, но разве это будет работать при условии, что редирект из другой функции не будет включать в себя переменную messageVote? Разве не напишет - “нужно 3 аргумента, 2 подано”?
Насколько я понимаю - не напишет, если ничего не передано примет, что messageVote=None, по умолчанию.
Ок, я думал что это только для urls.py действует, а не для return…
FishHook
skill
Ок, я думал что это только для urls.py действует, а не для return…
Шутить изволите? В Джанге нету ничего кроме, собственно, Питона. Почему это питоновский синтаксис должен вести себя как-то иначе в Джанго-проекте?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB