如何在django中的urls.py文件中识别以锚(#)开头的URL?

时间:2016-07-21 18:56:40

标签: python angularjs django

我已经开始在angularJS和django中构建我的应用程序,在创建登录页面后,我尝试在成功登录后将我的应用程序重定向到新的URL。我正在使用$location变量来重定向我的页面。这是我的代码:

$scope.login = function() {
    $http({
        method: 'POST',
        data: {
            username: $scope.username,
            password: $scope.password
        },
        url: '/pos/login_authentication/'
    }).then(function successCallback(response) {
        user = response.data
        console.log(response.data)
        if (user.is_active) {
            $location.url("dashboard")
        }
    }, function errorCallback(response) {
        console.log('errorCallback')
    });
}

我的初始网址为http://localhost:8000/pos/,点击登录按钮后,上面的函数调用,我被重定向到http://localhost:8000/pos/#/dashboard。但我无法在urls.py文件中的正则表达式模式中捕获此URL:

我的项目urls.py文件:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^pos/', include('pos.urls')),
    url(r'^admin/', admin.site.urls),
]

我的pos应用程序的urls.py文件:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^login_authentication/$', views.login_authentication, name='login_authentication'),
    url(r'^#/dashboard/$', views.dashboard, name='dashboard')
]

使用此功能,我在访问此http://localhost:8000/pos/#/dashboard链接时获得了相同的登录页面。这意味着,在我的urls.py应用程序的pos文件中,我将http://localhost:8000/pos/#/dashboard映射到urlpatterns的第一个对象:url(r'^$', views.index, name='index')。如何让python区分两个链接?

2 个答案:

答案 0 :(得分:1)

你对网址有一些重大的误解和锚定。该主播被称为正式Fragment identifier,它不是主网址的一部分,因此如果您在访问#这样的网址时http://localhost:8000/pos/#/dashboard,则您的浏览器会将其余部分视为#/dashboard作为http://localhost:8000/pos/呈现的页面中的锚点。你不应该在你的urls.py定义中使用它。请仔细阅读上面的链接,了解锚的用法。

答案 1 :(得分:0)

使用此answer的帮助,我通过angular找到了一个很好的重定向方法,它不使用$ window附加任何锚标记:

$scope.login = function() {
    $http({
      method: 'POST',
      data: {
        username: $scope.username,
        password: $scope.password
      },
      url: '/pos/login_authentication/'
    }).then(function successCallback(response) {
        user = response.data
        console.log(response.data)
        if (user.is_active) {
            $window.location.href = '/pos/dashboard';
        }
    }, function errorCallback(response) {
        console.log('errorCallback')
      });
}