【问题标题】:django returning or posting wrong template html?django 返回或发布错误的模板 html?
【发布时间】:2019-04-18 03:33:51
【问题描述】:

我上个月开发了一个名为“dms”的 django 项目和一个名为“add_excel”的应用程序。该应用程序从网页接收 excel 文件并将数据存储到 mysql 数据库中。今天又加了两个app,“add_struc”和“homepage”,应该是另外一个function app和homepage app。但奇怪的事情出现了。在我点击“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 #

我点击了“上传”,但它再次将我重定向到主页。

如果我删除整个项目的urls.py中的主页url,然后再次点击上传按钮,它会说:

找不到页面 (404) 请求方法:POST 请求 URL:http://127.0.0.1:8000/homepage/index/ 使用定义的 URLconf 在 dms.urls 中,Django 按以下顺序尝试了这些 URL 模式:

^admin/ ^$ [name='index'] ^addexcel/ ^addstruc/ 当前路径, 主页/索引/,与其中任何一个都不匹配。

dms项目中的urls.py:

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')), 
]

add_excel 应用中的 urls.py:

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'),
       ]

add_struc 应用中的 urls.py:

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'),
       ]

add_excel 应用中的views.py:

# -*- 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})

【问题讨论】:

    标签: python django url


    【解决方案1】:

    您在所有导致冲突的网址格式中都使用了名称index。这些应该被正确命名空间(homepage-indexexcel-index 等),因此当您在整个应用程序中引用它们时,开发人员和程序都可以清楚地知道应该选择哪个 URL。

    我的理论是在您的 HTML 表单中生成了一些使用名称 index 的 URL,并且您的 Django 站点选择了该 URL 的主页,因此您的 IndexView 不会运行。

    【讨论】:

    • 谢谢!事实证明,url模式必须像你说的那样修改,html文件也应该改变,比如
      或者它可能会转到错误的页面,在这种情况下是主页。
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 2013-11-28
    • 1970-01-01
    • 2016-12-02
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多