Проверьте контекст модели Django

У меня есть такой шаблон тега:

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})

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

1 ответ

Решение

Вы, вероятно, захотите использовать 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)
Другие вопросы по тегам