【问题标题】:Django duplicated url request: "home/home/'Django 重复 url 请求:“home/home/”
【发布时间】:2020-06-23 00:40:08
【问题描述】:

我的代码可以在本地主机上完美运行,但是放在服务器上时会出错。

重点是,当我上传文件时,它返回“base.com/home/home”(home 两次 = 404),而不仅仅是“base.com/home”或重定向的目的地。

模板:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <button type="submit">Upload</button>
</form>

查看:

def login_page(request):
    if request.user.is_authenticated:
        return redirect('base-home')
    form = UserLoginForm(request.POST or None)
    nextr = request.GET.get('next')
    if form.is_valid():
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(username=username, password=password)
        login(request, user)
        if nextr:
            return redirect(nextr)
        return redirect('base-home')
    return render(request, 'base/login.html', {'form': form})
    
@login_required    
def home(request):
    if request.method == 'POST':
        return redirect('base-temp', 1)
    return render(request, 'base/home.html', {'test': 'test'})

网址:

urlpatterns = [
    path('', views.login_page, name='base-login'),
    path('logout/', views.logout_page, name='base-logout'),
    path('home/', views.home, name='base-home'),
    path('temp/<int:pk>/', views.temp, name='base-temp')
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

项目设置:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

所有其他页面、媒体、静态都工作正常。仅此视图中的帖子。

我尝试对 ".""/home/""{% url 'base-home'%}" 使用操作,但它们都给出了相同的 404 来复制主页 url。

我也尝试创建一个单独的视图来处理上传,但是错误变成了"home/upload"而不是"upload"

我在 stackoverflow 中看到了一些类似的问题,但没有找到适合我的答案。

有什么建议吗?

编辑:

如果我将模板更改为:

<form method="post">
    {% csrf_token %}
    <textarea name="text"></textarea>
    <button type="submit">Send</button>
</form>

和视图:

def home(request):
    if request.method == 'POST':
    return redirect('base-temp', 2)
    return render(request, 'base/home.html', {'test': 'test'})

我没有使用 django 的 forms.py。

就是这样。没有其他的。只有基本温度的导入和简单的函数视图/模板。

编辑 2:添加了有关视图的更多详细信息。

解决方案:

如果其他人有同样的问题,我会根据 Maxwell O. Oyaro 的回答将解决方案留在这里。

我把home路由改成了app urls.py的空路径:

urlpatterns = [
    path('', views.home, name='base-home'),
    path('logout/', views.logout_page, name='base-logout'),
    path('temp/<int:pk>/', views.temp, name='base-temp')
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后,我将登录路径移至项目 urls.py:

...
from base import views as base_views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', base_views.login_page, name='login'),
    path('', include('base.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

  • 您的服务器配置似乎有问题。你能分享你正在使用的服务器和配置吗?
  • 我正在使用 namecheap。 Python 3.7.3 和 Django 2.2。我强调其他网页和帖子正在运行。即使在同一页面上,也有另一种带有 textarea 的表单有效。我删除了那部分代码来界定问题。
  • 当您返回重定向时是否会出现问题?您的网络服务器上的代理重定向设置似乎仍然有问题
  • 其他重定向工作完美。这是唯一存在此问题的页面,并且仅在上传文件时出现。如果帖子是文本,则可以在同一页面上使用。
  • 你能分享剩下的视图/表单吗?

标签: django django-views


【解决方案1】:

检查您的 home 是为 django 项目全局定义的,还是为应用程序本身定义的。

为项目和单独的应用程序全局放置模板可能会令人困惑。如果您有一个带有 home 的项目的模板,并且您在名为 home 的应用程序中有另一个 home 模板,它可能无法满足您的期望。

仔细检查。

【讨论】:

  • 嗨!项目 url = urlpatterns = [path('admin/', admin.site.urls), path('', include('gabnet.urls'))] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)。在(项目和应用程序)urls.py 中都有空路径可以吗?
  • 就是这样!!我将登录路径移至项目 urls.py 并将主视图移至应用程序 urls.py 中的空路径。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2020-08-17
  • 2023-03-28
  • 2017-03-14
  • 2018-06-26
  • 2018-05-28
  • 2014-11-18
相关资源
最近更新 更多