Как избежать одиночных кавычек в теге render_field django-widget-tweaks? - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь использовать django-widget-tweaks для отображения следующего поля формы:

{% render_field profile_form.bio class+="form-control" id="bio" rows="3" oninput="showBtn('updateProfile')" %}

В это:

<textarea class="form-control" id="bio" rows="3" oninput="showBtn('updateProfile')"></textarea>

Однако, я получаю сообщение об ошибке разбора, поскольку Django превращает одинарные кавычки в виджете в двойные кавычки.

Функция showBtn js выглядит следующим образом:

// Shows a button given an id
showBtn: function (selector) {
  let btn = document.getElementById(selector);
  btn.classList.remove("btn-hidden");
}

Причина, по которой я использую django-widget-tweaks, заключается в том, чтобы сохранить все HTML-классы и атрибуты изолированными в шаблонах.

Что я уже пробовал:

  • представляет одиночную кавычку в виде текстовой сущности &#39;. Он отображает шаблон (без ошибки синтаксического анализа), но на самом деле не заменяет ascii на кавычки, поэтому js никогда не запускается
  • убегая с косой чертой
  • с использованием safe templatetag
  • с использованием autoescape шаблона тега

Для справки, вот форма модели:

# forms.py
class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ["bio"]

И оригинальная модель:

# models.py
class Profile(models.Model):
    """ Non-auth related user information about an user"""
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)

1 Ответ

0 голосов
/ 09 апреля 2019

Хорошо ... вот как я в конечном итоге решил эту проблему.

Вместо того, чтобы использовать синтаксис, похожий на обычные атрибуты HTML (именно поэтому мне в первую очередь понравился django-widget-tweaks),Шаблонные метки пакетов работают.Но это как обходной путь для некоторой ошибки django-widget-tweaks.

{% render_field profile_form.bio|add_class:"form-control"|attr:"id:bio"|attr:"rows:3"|attr:"oninput:showBtn('updateProfile')" %}

Таким образом атрибут oninput анализируется правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...