使用 Django 将基本 URL 转发到特定页面
Posted
技术标签:
【中文标题】使用 Django 将基本 URL 转发到特定页面【英文标题】:Forward base URL to specific page with Django 【发布时间】:2017-03-26 05:20:59 【问题描述】:我从一位辞职的同事那里接手了一个 Django Web 应用程序。目前,该应用的用户必须输入一个很长的 URL 才能登录该应用并使用它,例如:
http://myapp.company.com/djangoapp/mydir/login
而
的基本 URL(这是正确的术语吗?)http://myapp.company.com/
什么都没有。
所以现在他们希望http://myapp.company.com/ 自动转发到 http://myapp.company.com/djangoapp/mydir/login
听起来很简单,我可以使用 html 或 Spring 框架来完成,但使用 Django 我似乎无法弄清楚这一点。我觉得我需要编辑urls.py
,但我不确定以何种方式进行。
我可以访问 Django 应用程序和托管它的服务器,但没有像 cPanel 或任何类似的简化工具来管理域。域本身是由某个不知名的 IT 人员在很远很远的部门建立和拥有的。
【问题讨论】:
Django URL Redirect的可能重复 【参考方案1】:<meta http-equiv="refresh" content="0; url=http://example.com/" />
注意:放在头部。
如果您添加快速链接以防无法正确刷新,则还适用于旧版浏览器:
<p><a href="http://example.com/">Redirect</a></p>
将显示为
重定向
这仍然可以让您通过额外的点击到达您要去的地方。
【讨论】:
谢谢。这就是您重定向 HTML 页面的方式,但是我会将它放在 Django 项目的什么位置呢?【参考方案2】:创建一个指向 django RedirectView 的 url。
例如。
urls.py
url(_(r'^$'), LoginRedirectView.as_view(), name='redirect-to-login')
views.py
class LoginRedirectView(RedirectView):
pattern_name = 'redirect-to-login'
def get_redirect_url(self, *args, **kwargs):
return '/djangoapp/mydir/login'
或者您可以直接将重定向url作为url属性提及
from django.views.generic.base import RedirectView
url(r'^$', RedirectView.as_view(url='http://myapp.company.com/djangoapp/mydir/login'), name='login-redirect')
【讨论】:
谢谢。这听起来很正确,让我试试。 +1。第一个喜欢是 urlpatterns 的一部分,对吧?目前主文件夹中有一个urls.py
,但那里没有views.py
。 djangoapp
文件夹中有一个 views.py
。我要在主文件夹中为此创建一个新的views.py
吗?
我刚刚通过在该主文件夹中创建一个新的views.py
进行了尝试,但它似乎对我不起作用......我明天会回到这个。谢谢!
很高兴它有帮助 :) 也可以将其写入 djangoapp 视图文件中,但请确保在 urls.py 中导入正确的文件。
确保在 urls.py 中导入视图类
请查看更新后的答案。我添加了另一种方法。【参考方案3】:
最简单的可能是在索引中添加一个装饰器来强制登录。但是登录后他们会被重定向到那个页面,我不知道这对你的情况是否有用。
#view.py
from django.contrib.auth.decorators import login_required
@login_required
def yourindex(request):
...
或者如果使用基于类的视图:
#urls.py
from django.contrib.auth.decorators import login_required
...
url(r'^$' , login_required(Myindex.as_view()) , name='index'),
【讨论】:
以上是关于使用 Django 将基本 URL 转发到特定页面的主要内容,如果未能解决你的问题,请参考以下文章