Джанго возвращает или публикует неправильный шаблон HTML? - PullRequest
0 голосов
/ 18 апреля 2019

В прошлом месяце я разработал проект django с именем "dms" и приложение с именем "add_excel". Приложение получает файлы Excel с веб-страницы и сохраняет данные в базе данных MySQL. Сегодня я добавил еще два приложения, «add_struc» и «homepage», которые должны быть еще одним приложением функций и приложением домашней страницы. Но появляется что-то странное. После того, как я нажал кнопку «Загрузить» в приложении «add_excel», вместо его оригинальных функций он перенаправляет на «домашнюю страницу», ничего не делая с базой данных.

Код VS показывает:

[18 / Apr / 2019 11:08:00] «GET / HTTP / 1.1» 200 317 # Я открыл домашняя страница [18 / Apr / 2019 11:08:02] «GET / addexcel / index / HTTP / 1.1» 200 1341 # Я нажал на гиперссылку приложения «add_excel» [18 / Apr / 2019 11:08:20] "POST / homepage / index / HTTP / 1.1" 200 317 #

Я нажал «загрузить», но он снова перенаправил меня на домашнюю страницу.

Если я удаляю URL домашней страницы в urls.py для всего проекта и снова нажимаю кнопку загрузки, он говорит:

Страница не найдена (404) Метод запроса: запрос POST URL: http://127.0.0.1:8000/homepage/index/ Использование определенного URLconf в dms.urls Джанго попробовал эти шаблоны URL в следующем порядке:

^ admin / ^ $ [name = 'index'] ^ addexcel / ^ addstruc / Текущий путь, homepage / index /, не соответствует ни одному из них.

Проект urls.py в dms:

from django.contrib import admin
from django.conf.urls import url, include
from homepage.views import index # default homepage

urlpatterns = [
    url(r'^admin/', admin.site.urls), 
    url(r'^$', index, name='index'),  # homepage
    url(r'^addexcel/', include('add_excel.urls')), 
    url(r'^addstruc/', include('add_struc.urls')), 
]

urls.py в приложении add_excel:

from django.conf.urls import url
from django.urls import path
from django.contrib import admin
from add_excel.views import IndexView
urlpatterns = [
       url(r'index/', IndexView.as_view(), name ='index'),
       ]

urls.py в приложении add_struc:

from django.conf.urls import url
from django.urls import path
from django.contrib import admin
from add_struc.views import IndexView
urlpatterns = [
       url(r'index/', IndexView.as_view(), name ='index'),
       ]

urls.py в приложении домашней страницы:

from django.conf.urls import url
from django.urls import path
from django.contrib import admin
from homepage.views import index
urlpatterns = [
       url(r'index/', index, name='index'),
       ]

views.py в приложении add_excel:

# -*- coding:utf-8 -*-
import os
import os.path
import sys
import datetime
from builtins import int
from django.db import models
from django.shortcuts import render
from django.views import View
import pymysql
import xlrd
from xlrd import xldate_as_tuple

# Create your views here.
class IndexView(View):
    template_name = 'add_excel/index.html'
    context={}
    def get(self, request):
        return render(request, 'add_excel/index.html', {})

    def post(self, request):
        # if request.method == 'POST' and 'excel_file' in request.POST:
        if request.method == 'POST' and request.FILES["excel_file"]:
            # do something
            return render(request, 'add_excel/index.html', {"excel_data":excel_data})

1 Ответ

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

Вы используете имя index во всех ваших шаблонах URL, которые вызывают конфликт. Они должны быть должным образом распределены по пространству имен (homepage-index, excel-index и т. Д.), Поэтому, когда вы обращаетесь к ним по всему приложению, и для разработчиков, и для программы очевидно, какой URL следует выбирать.

Моя теория заключается в том, что в вашей HTML-форме есть какое-то поколение URL, которое использует имя index, и ваш сайт Django выбирает домашнюю страницу для URL, чтобы ваш IndexView не запускался.

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