Django 2.2 - проблема с использованием атрибута data-url html для загрузки изображений - PullRequest
0 голосов
/ 06 октября 2019

Я видел NoReverseError Django, опубликованный здесь много раз, но, похоже, ни одно из решений не работает в этом конкретном случае.

Моя главная цель - создать поле загрузки изображения в форме создания моего объекта, котораязагружает несколько изображений на отдельные объекты модели. Я следую этому учебнику , потому что конечный продукт идеально подходит.

В учебнике указывается, что атрибут data-url должен указывать на маршрут / представление, где будет находиться форма файлаобработано.

Сама форма отлично работает, как и URL / showroom / create.

Чтобы форма Ajax вписалась в мой более крупный проект, мне пришлось изменить несколько атрибутов:

  1. Слово «фотографии» на «изображения» для согласованности.
  2. Я не использую представление basic_upload, поскольку оно находится на той же странице, что и мое представление загрузки create_car. (который вы увидите в файле urlconf и прекрасно работает без этого аддона) Наряду с несколькими другими хитростями.

Где-то вдоль линии я прервал поток и не могу понятьчто с этим не так.

Вот мои views.py для формы загрузки .

class CarCreate(CreateView):
    model = Car
    fields = '__all__'
    success_url = reverse_lazy('showroom:car-detail')

    slug_field = 'id'
    slug_url_kwarg = 'car_create'

    def get(self, request):
        image_list = Car.objects.all()
        return render(self.request, 'showroom/car_form.html', {'images': image_list})

    def post(self, request):
        form = ImageForm(self.request.POST, self.request.FILES)
        if form.is_valid():
            image = form.save()
            data = {'is_valid': True, 'name': image.file.name, 'url': image.file.url}
        else:
            data = {'is_valid': False}
        return JsonResponse(data)

Соответствующая разметка шаблона:

  <button type="button" class="btn btn-primary js-upload-photos">
    <span class="glyphicon glyphicon-cloud-upload"></span>Upload images
  </button>
  <input id="fileupload" type="file" name="file" multiple
  style="display: none;"
  data-url="{% url 'showroom:images:image_upload' %}" 
  data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>

Специфичный для приложения urls.py

Соответствующим является путь car_create.

app_name = 'showroom'

urlpatterns = [
    path('', views.index, name='index'),
    path('cars/', views.CarListView.as_view(), name="cars"),
    path('car/<uuid:car_detail>/', views.CarDetailView.as_view(), name='car-detail'),
    path('mycars/', views.SellerCarsListView.as_view(), name='my-cars'),
    path('create/', views.CarCreate.as_view(), name='car_create'),
    path('car/<uuid:car_update>/update/', views.CarUpdate.as_view(), name='car_update'),
    path('car/<slug:car_delete>/delete/', views.CarDelete.as_view(), name='car_delete'),
]

Вот возникшая ошибка:

Exception Type: NoReverseMatch at /showroom/create/
Exception Value: 'images' is not a registered namespace inside 'showroom'

Прочитав другие ответы Stackoverflow, я попробовал несколько разных решений: 1. Это не ошибка пространства имен, поскольку я уже прикрепил «showroom: images». 2. Проблема заключается в:

'data-url="{% url 'showroom:images:image_upload' %}"'

Я знаю, потому что, если я изменяю URL-адрес данных на «#», страница загружается нормально, но не работает.

Редактировать для получения дополнительной информации

Я прочитал это руководство по решению ответа , но оно явно не решило мою проблему. Если я правильно понимаю, другие адреса ответов Stackoverflow генерируют urlse из обратных функций.

Моя проблема не с самим URL, showroom / create / работает отлично. Моя проблема связана с формой загрузки изображений, которую я пытаюсь создать, и я указал на конкретную строку, генерирующую ошибку.

Требуется ли какая-либо дополнительная информация?

Редактировать 2

Я также добавлю, что мое приложение называется «showroom», и я определилпеременная app_name на странице приложения urlconf.

После просмотра других страниц большинство из них имеют некоторые явно определенные context имена, которые затем вызываются в шаблоне. Есть ли способ, как я могу сделать это для формы?

Я пробовал ответы из этого другого потока , например, вложив пространства имен ('showroom: images: image_upload') ипока радости нет.

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