safe - templates dirs django
Etiqueta de plantilla con errores de Django: el objeto ''Ninguno tipo'' no tiene ningĂșn atributo ''fuente'' (2)
La línea 265 (o 272) de su fuente views.py está enviando un objeto que es un ''NoneType'' del cual el código más profundo está tratando de obtener el atributo ''fuente''. En otras palabras, está enviando un objeto en blanco (NoneType) al motor de la plantilla, por lo tanto, observe su código sobre estas líneas y vea qué objetos no tienen un valor cuando los envíe.
¿Se pregunta qué está causando esto? Me dejó perplejo por un tiempo, todo se comprueba en la consola cuando se ejecuta en pedazos
como nota al margen: la plantilla usa el mismo objeto en otros lugares y muestra valores: el objeto en la plantilla también es el mismo que se carga en la consola a continuación
error
El objeto ''NoneType'' no tiene ningún atributo ''fuente''
modelo
{% form_transaction prop %}
valor de consola de prop
>>> prop = VacationHome.objects.get(pk=1)
>>> prop
<VacationHome: Samantha Dunn''s vacation home at Close to Disney>
>>> prop.sell
0
>>> prop.rent
1
>>> count = 0
>>> string = ''''
>>> type = []
>>> num = 0
>>> for tr in TRANSACTION_MODEL:
... if getattr(prop, tr, False):
... type.append(count+1)
... cur_count = count+1
... string += ''<li><label for="id_transaction_%s"><input type="checkbox" name="transaction" value="%s" id="id_transaction_%s" />%s</label></li>'' % (count, cur_count, count, TRANSACTION_TITLE[count][1])
... num += 1
... count += 1
...
>>> string
''<li><label for="id_transaction_1"><input type="checkbox" name="transaction" value="2" id="id_transaction_1" />Rental</label></li>''
DEFINICIONES
TRANSACTION_TITLE = (
(1, ''Purchase''),
(2, ''Rental''),
(3, ''Exchange''),
)
TRANSACTION_MODEL = [''sell'', ''rent'', ''exchange'']
etiqueta de plantilla
@register.tag
def prop_form_transaction(parser, token):
try:
tag_name, prop = token.split_contents()
count = 0
string = ''''
type = []
num = 0
for tr in TRANSACTION_MODEL:
if getattr(prop, tr, False):
type.append(count+1)
cur_count = count+1
string += ''<li><label for="id_transaction_%s"><input type="checkbox" name="transaction" value="%s" id="id_transaction_%s" />%s</label></li>'' % (count, cur_count, count, TRANSACTION_TITLE[count][1])
num += 1
count += 1
if num:
if num > 1:
return string
else:
return ''<input type="hidden" name="transaction" value="''#+str(type[0])+''" />''
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
puntos de vista
def property_list_city(request, type, city):
city = str(city).replace(''-'', '' '')
if type == ''timeshare'':
timeshares = Timeshare.objects.filter(resort__city__icontains=city).filter(available__icontains=True)
resorts = Resort.objects.filter(city__icontains=city)
objects = chain(timeshares, resorts)
elif type == ''vacation_home'':
objects = VacationHome.objects.filter(city__icontains=city)
else:
objects = False
context = { #line 265
''properties'' : objects,
''title'' : city,
''type'' : type,
}
return render_to_response(''properties/properties_list.html'', context_instance=RequestContext(request, context))
rastrear
Environment:
Request Method: GET
Request URL: http://localhost:8000/properties/single/vacation_home/1/
Django Version: 1.1
Python Version: 2.6.4
Installed Applications:
[''django.contrib.admin'',
''django.contrib.auth'',
''django.contrib.contenttypes'',
''django.contrib.sessions'',
''django.contrib.humanize'',
''properties'',
''config'',
''sorl.thumbnail'',
''haystack'',
''south'',
''debug_toolbar'']
Installed Middleware:
(''django.middleware.common.CommonMiddleware'',
''django.contrib.sessions.middleware.SessionMiddleware'',
''django.contrib.auth.middleware.AuthenticationMiddleware'',
''debug_toolbar.middleware.DebugToolbarMiddleware'')
Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File "/home/alvin/workspace/timeshare/properties/views.py" in property_single
272. return property_single_context(request, type, property)
File "/home/alvin/workspace/timeshare/properties/views.py" in property_single_context
265. return render_to_response(''properties/single.html'', context, context_instance=RequestContext(request))
File "/usr/local/lib/python2.6/dist-packages/django/shortcuts/__init__.py" in render_to_response
20. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in render_to_string
103. t = get_template(template_name)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in get_template
82. template = get_template_from_string(source, origin, template_name)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in get_template_from_string
90. return Template(source, origin, name)
File "/usr/local/lib/python2.6/dist-packages/django_debug_toolbar-0.8.1.alpha-py2.6.egg/debug_toolbar/panels/template.py" in new_template_init
28. old_template_init(self, template_string, origin, name)
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in __init__
168. self.nodelist = compile_string(template_string, origin)
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in compile_string
189. return parser.parse()
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in parse
285. compiled_result = compile_func(self, token)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in do_extends
169. nodelist = parser.parse()
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in parse
285. compiled_result = compile_func(self, token)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in do_block
147. nodelist = parser.parse((''endblock'', ''endblock %s'' % block_name))
File "/usr/local/lib/python2.6/dist-packages/django/template/__init__.py" in parse
289. self.extend_nodelist(nodelist, compiled_result, token)
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in extend_nodelist
56. node.source = token.source
Exception Type: AttributeError at /properties/single/vacation_home/1/
Exception Value: ''NoneType'' object has no attribute ''source''
Se agradecen todas las ideas sobre dónde buscar para depurar esto. Muchas gracias de antemano si sabe por qué se produce el error.
Me he encontrado con esto varias veces y siempre ha sido lo mismo (al menos para mí). Si la función de etiqueta de plantilla no devuelve nada, este error aparece.
class MyTag(template.Node):
def __init__(self, name):
self.name=name
def render(self, context):
context[self.name]=''czarchaic''
#return an empty string since we''ve only modified the context
return ''''
@register.tag
def my_tag(parser, token):
bits=token.split_contents()
if len(bits)==2:
return MyTag(bits[1])
#return an empty string if all test fail
return ''''
EDITAR Mirando su código, parecería que si num
todavía fuera 0 en el if num:
verifique que esta etiqueta no devuelva nada, lo que da como resultado este error.