簡體   English   中英

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'),

我認為你的模板名稱相互沖突。 您可以像這樣為整個項目創建一個模板文件夾

Project
   |>Templates
   |>store
   |>home

在模板中,您可以像這樣放置模板

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

現在,您可以像這樣給出模板的路徑

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

如果您想將模板保留在您的應用程序下的目錄中,那么問題可能會對您有所幫助。

你有一個尾部斜杠'/'

url(r'^store/$', 'store.views.store_list', name='view_store_list')

因此它對url localhost:8000/store/有效,但對於url localhost:8000/store無效。 所以你需要刪除尾部斜杠。

加上@Daniel是對的,你需要像他在回答中提到的那樣放置主頁URL。 尾部斜杠是更改主頁URL后無法使其工作的原因。

Daniel提到的第一個問題是url模式,如果你只是設置空字符串它將始終匹配。 因此,您應該使用url(r'^$', 'home.views.index', name='view_home') r'^$'表示模式只與空字符串匹配。 或者,您可以在列表末尾移動此URL,如果其他任何內容匹配,它將用作默認視圖。

我看到的第二個問題是你在store_list視圖中返回:

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

您是否為索引和存儲使用相同的模板index.html ,還是只是復制和粘貼錯誤? 如果是這樣,你確定stores變量包含數據嗎? 如果您沒有任何結果,結果將與索引視圖相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM