использование библиотеки render_to_string не работает - PullRequest
0 голосов
/ 27 июня 2019

У меня есть код django, который позволяет пользователю добавлять книги в список с помощью функции javascript, которая обрабатывает ajax-запрос, когда пользователь нажимает кнопку. я использую BootStrap 4

проблема в том, что после того, как пользователь нажмет кнопку, на консоли отобразится следующая ошибка:

Файл "C: \ Users \ LTGM ~ 1 \ Desktop \ CRUDDJ ~ 1 \ env \ lib \ site-packages \ widget_tweaks \ templatetags \ widget_tweaks.py", строка 163, в поле render_field поднять TemplateSyntaxError (error_msg + ":% s"% pair) django.template.exceptions.TemplateSyntaxError: тегу 'render_field' требуется поле формы, за которым следует список атрибутов и значений в форме attr = "value": class

urls.py

from django.contrib import admin
from django.urls import path
from .views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('books/',book_list, name = "book_list"),
    path('books/create/',book_create, name = "book_create"),
]

views.py

from django.shortcuts import render
from books.models import Book
from books.forms import BookForm
from django.http import JsonResponse
from django.template.loader import render_to_string

def book_list(request):
    books = Book.objects.all()#list all records
    return render(request, './book_list.html',{'books':books})


def book_create(request):
    form = BookForm()
    context= {'form':form}
    html_form = render_to_string('./partial_book_create.html',context,request=request,)
    return JsonResponse({'html_form':html_form})

partial_book_create.html

{% load widget_tweaks %}

<form method="post">
    {% csrf_token %}
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-lable="Close">
            <span aria-hidden = "true">&times;</span>
        </button>
        <h4 class="modal-title">Create a new book</h4>
    </div>
    <div class="modal-body">
        {% for field in form %}
            <div class="form-group{% if field.errors %} has-error{% endif %}">
                <label for ="{{ field.id_for_lable }}">{{ field.lable }}</label>
                {% render_field field class ="form-control" %}
                {% for error in field.errors %}
                    <p class="help-block">{{ error }}</p>
                {% endfor %}
            </div>
        {% endfor %}
    </div>
    <div class="modal-footer">
        <button type="buuton" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Create book</button>
    </div>
</form>

books.js

$(function(){
    $(".js-create-book").click(function(){
        $.ajax({
            url:"/books/create/",
            type:"get",
            dataType:"json",
            beforeSend:function(){
                $("#modal-book").modal("show");
            },
            success: function(data){
                $("#modal-book .modal-content").html(data.html_form);
            }
        });
    });
});

я не понял что такое и как исправить ошибку

Я новичок в widget_tweaks и render_to_string

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 27 июня 2019

У вас есть дополнительный пробел перед = в вашем теге render_field.

{% render_field field class="form-control" %}
...