2016-02-12 4 views
0

У меня есть такой templatetag:Проверьте контекст модели Джанго

def link(obj): 
    return reverse('admin:%s_%s_change' % (obj._meta.app_label, obj._meta.module_name), args=[obj.id]) 

class AdminEditNode(template.Node): 
    def __init__(self, object): 
     self.object = template.Variable(object) 

    def render(self, context): 
     return link(self.object.resolve(context)) 

def edit_link(parser, token): 
    try: 
     #split content 
     tag_name, info = token.split_contents() 
    except ValueError: 
     raise template.TemplateSyntaxError(
      '%r tag requires one model argument' % token.contents.split()[0]) 


    return AdminEditNode(info) 

register.tag('edit_link', edit_link) 

Он визуализирует ссылку на админ страницу редактирования объекта, который находится в контексте шаблона, который я посылаю там, на мой взгляд:

def home(request): 
    """ 
    Home page view 
    """ 
    context = Contact.objects.first() 
    return render(request, 'home.html', {'info': context}) 

Мне нужно сделать тест, что там не будет ошибок, если контекст будет строкой или целым числом или Нет. Мой вопрос, как сделать «если», где я могу предотвратить эти ошибки?

ответ

0

Возможно, вы захотите использовать isinstance. Так что может быть что-то вроде этого:

class AdminEditNode(template.Node): 
    def __init__(self, object): 
     self.object = template.Variable(object) 

    def render(self, context): 
     resolved = self.object.resolve(context) 
     if not isinstance(resolved, models.Model): 
      # Maybe you want to raise an exception here instead? 
      return '' 

     return link(resolved) 
+0

Спасибо большое! Это именно то, что я искал. – kapitoshka

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