Я видел NoReverseError Django, опубликованный здесь много раз, но, похоже, ни одно из решений не работает в этом конкретном случае.
Моя главная цель - создать поле загрузки изображения в форме создания моего объекта, котораязагружает несколько изображений на отдельные объекты модели. Я следую этому учебнику , потому что конечный продукт идеально подходит.
В учебнике указывается, что атрибут data-url должен указывать на маршрут / представление, где будет находиться форма файлаобработано.
Сама форма отлично работает, как и URL / showroom / create.
Чтобы форма Ajax вписалась в мой более крупный проект, мне пришлось изменить несколько атрибутов:
- Слово «фотографии» на «изображения» для согласованности.
- Я не использую представление 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') ипока радости нет.