首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django复制url请求:"home/home/‘

Django复制url请求:"home/home/‘
EN

Stack Overflow用户
提问于 2020-06-23 00:40:08
回答 1查看 629关注 0票数 0

我的代码在本地主机上工作得很好,但是当它放在服务器上时会产生一个错误。

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

模板:

代码语言:javascript
运行
复制
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <button type="submit">Upload</button>
</form>

查看:

代码语言:javascript
运行
复制
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'})

Url:

代码语言:javascript
运行
复制
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)

项目设置:

代码语言:javascript
运行
复制
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

所有其他页面,媒体,静力学都很好。只有这个视图中的帖子。

我尝试使用".""/home/""{% url 'base-home'%}"的操作,但它们都提供了相同的404用于复制home url。

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

我在堆栈溢出中看到了一些类似的问题,但我没有找到对我有用的答案。

有什么建议吗?

编辑:

如果我将模板更改为:

代码语言:javascript
运行
复制
<form method="post">
    {% csrf_token %}
    <textarea name="text"></textarea>
    <button type="submit">Send</button>
</form>

并认为:

代码语言:javascript
运行
复制
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的答案。

我将主路径更改为应用程序urls.py的空路径:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
...
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 07:11:05

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

在全球范围内为项目和应用程序放置模板可能会让人感到困惑。如果您有一个带有home的项目模板,并且在应用程序calle中有另一个主模板,那么它可能不会满足您的期望。

仔细检查一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62525584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档