Достижение пользователя django из шаблона javascript

Я следую руководству Кори Шафера по django и столкнулся с некоторыми проблемами, о которых он не рассказывает. Я пытаюсь сделать профили, которые видны всем, но редактируются только самим пользователем. В моем views.py у меня есть булево значение "editable", и эта часть работает. Однако я не могу передать это булево в мой js файл... Код ниже.

const button = document.getElementById("button");


button.addEventListener("click", () => {
    const form = document.getElementById("form");
    var bool = {{ user.profile.editable }};

    if(form.style.display == "none" && bool){
        form.style.display = "block";
    }else{
        form.style.display = "none";
    }
});

Когда я проверяю его в браузере, он выдает syntaxError, потому что я использую '{'. А вот код из моего views.py:

@login_required
def profile(request, username):

    user = User.objects.get(username=username)
    Profile.objects.get_or_create(user=request.user)
    editable = False

    if request.method == "POST":
        user_form = UserUpdateForm(request.POST, instance=request.user)
        profile_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user.profile)

        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
            messages.success(request, f"Profile successfully updated!")
            return redirect("profile")
    else:
        user_form = UserUpdateForm(instance=request.user)
        profile_form = ProfileUpdateForm(instance=request.user.profile)

    context = {
        "user_form": user_form,
        "profile_form": profile_form
    }

    if request.user == user:
        editable = True

    return render(request, "users/profile.html", context)

Любая помощь будет очень признательна. Заранее спасибо!

Во-первых, если вы хотите получить доступ к редактируемой переменной, вам просто нужно передать ее в ваш контекст:

context['editable'] = editable

Во-вторых, считается плохой практикой передавать переменные Django непосредственно в тегах JS <script>. Если вы хотите получить доступ к этим данным, то либо создайте скрытый ввод со значением, либо используйте тег json_script:

https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#json-script

В-третьих, похоже, что ваш код просто отображает и обрабатывает форму профиля. Я бы предложил поместить проверку редактируемости в начало представления и перенаправлять, если пользователь не обращается к своему профилю

получить значение как строку и проверить следующим образом: "{{ user.profile.editable }}"==="True"

const button = document.getElementById("button");


button.addEventListener("click", () => {
    const form = document.getElementById("form");
    var bool = "{{ user.profile.editable }}"==="True";

    if(form.style.display == "none" && bool){
        form.style.display = "block";
    }else{
        form.style.display = "none";
    }
});
Вернуться на верх