django - urls.py 根路径集

django - urls.py root path set

当我输入 localhost:8000localhost:8000/store 时,两个视图都与 home/index.html 相同。 我希望这些路径设置不同的视图。

urls.py

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

urlpatterns = [
    url(r'', 'home.views.index', name='view_home'),
    url(r'^admin/', admin.site.urls),
    url(r'^store/$', 'store.views.store_list', name='view_store_list'),
    url(r'^store/(?P<store_id>\d+)$', 'store.views.single_store')
]

views.py - 家

from django.shortcuts import render

def index(request):
    return render(
        request,
        'index.html'
    )

views.py - 商店

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse

from .models import Store # fetch Store model

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # paginate
def store_list(request):
    store_list = Store.objects.all()
    paginator = Paginator(store_list, 2)

    page = request.GET.get('page')
    try:
        stores = paginator.page(page)
    except PageNotAnInteger:
        stores = paginator.page(1)
    except EmptyPage:
        stores = paginator.page(paginator.num_pages)

    return render(
        request,
        'index.html',
        {
            'stores': stores,
        }
    )

干杯!

编辑:

我也试过url(r'^$', 'home.views.index', name='view_home'),,但结果是一样的。

您需要锚定和终止根视图的模式:

 url(r'^$', 'home.views.index', name='view_home'),

您在

中有一个尾部斜杠“/”
url(r'^store/$', 'store.views.store_list', name='view_store_list')

因此它对 url localhost:8000/store/ 有效,但对 url localhost:8000/store 无效。所以你需要删除尾部斜杠。

此外,@Daniel 是对的,您需要像他在回答中提到的那样放置家 URL。尾部斜杠是您在更改主页后无法使其工作的原因 URL。

第一个问题,大牛提到的是url模式,如果你只设置空字符串,它总是匹配。因此你应该使用 url(r'^$', 'home.views.index', name='view_home')。使用 r'^$' 你是说模式只与空字符串匹配。或者,您可以将此 url 移动到列表的末尾,如果其他匹配,它将用作默认视图。

我看到的第二个问题是,在您的 store_list 视图中,您返回的是:

return render(
    request,
    'index.html',
    {
        'stores': stores,
    }
) 

您是否对索引和存储使用了相同的模板 index.html,还是只是复制和粘贴错误?如果是这样,您确定 stores 变量包含数据吗?如果您没有任何结果,结果将与索引视图相同。

我认为您的模板名称相互冲突。您可以像这样为整个项目创建一个模板文件夹

Project
   |>Templates
   |>store
   |>home

在模板中,您可以像这样放置模板

 Project
   |>Templates
        store
            |>index.html
        home
            |>index.html
   |store
   |home

现在您可以像这样给出模板的路径

def index(request):
return render(
    request,
    'home/index.html'
)

如果您想将模板保存在应用程序下的目录中,那么 this issue 可能会对您有所帮助。