Я написал обертку вокруг render_to_response
, которая выглядит следующим образом
from app import constants
def response(request, template, vars={}):
if '.' not in template:
template += '.html'
template_vars = {}
for constant in dir(constants):
if constant[:2] == '__': continue
template_vars[constant] = getattr(constants, constant) # BUG: causes you to stay logged in
template_vars.update({'settings':settings})
template_vars.update({'request':request})
template_vars.update(vars)
return render_to_response(template, template_vars, context_instance=RequestContext(request))
Кажется, что, добавляя константы в переменные шаблона, user.is_authenticated
всегда возвращает true в шаблоне, а user.username
получает значение от какого-то случайного пользователя (недавно зарегистрированного или что-то в этом роде).Просто интересно, почему это так?
Кто-нибудь захочет объяснить?
Если я напечатаю константы, это они
BidReasons
BidStatuses
CA_PROVINCES
COUNTRIES
CancellationRequestStatuses
EMAIL_NOTIFICATIONS
Enum
Flags
InvoiceStatuses
NA_REGIONS
PaymentMethods
PaymentTimes
PaymentTypes
SELECT_OPTION
SecretKeyPurposes
Sequence
ServiceTypes
ShipmentStatuses
USER_RATINGS
US_STATES
VehicleListingOptions
WeekDays
YES_OR_NO
Я не вижу там ничего такого, чтобудет связываться с user
Мое новое исправление, если интересно:
def response(request, template, vars={}):
if '.' not in template:
template += '.html'
template_vars = {'settings':settings, 'request':request, 'constants':constants.__dict__}
template_vars.update(vars)
return render_to_response(template, template_vars, context_instance=RequestContext(request))