1. 程式人生 > >Anaconda+django寫出第一個web app(十)

Anaconda+django寫出第一個web app(十)

one reg url cat AMM filter import tex nac

今天繼續學習外鍵的使用。

當我們有了category、series和很多tutorials時,我們查看某個tutorial,可能需要這樣的路徑http://127.0.0.1:8000/category/series/tutorial,這樣看上去十分的繁瑣,我們希望無論是在category下還是在series、tutorials下,都只有一級路徑。

那麽如何做呢?首先在views.py中,我們定義一個single_slug函數:

def single_slug(request, single_slug):
    categories = [c.category_slug for c in TutorialCategory.objects.all()]
    
if single_slug in categories: matching_series = TutorialSeries.objects.filter(tutorial_category__category_slug=single_slug) series_urls = {} for m in matching_series.all(): part_one = Tutorial.objects.filter(tutorial_series__tutorial_series=m.tutorial_series).earliest(
tutorial_published) series_urls[m] = part_one.tutorial_slug return render(request=request, template_name=main/category.html, context={tutorial_series:matching_series, part_ones: series_urls}) tutorials = [t.tutorial_slug for t in Tutorial.objects.all()]
if single_slug in tutorials: return HttpResponse(f"{single_slug} is a tutorial.")

這裏我們還定義了一個字典series_urls,字典的鍵為series,字典的值為該series下的第一個tutorial(也就是發布時間最早的tutorial)。然後我們指向了一個新的網頁category.html,內容如下:

{% extends ‘main/header.html‘ %}


{% block content %}
<div class="row">
    {% for t, partone in part_ones.items %}
    <div class="col s12 m6 l4">
      <a href="{{partone}}" style="color:#000">
          <div class="card hoverable">
            <div class="card-content">
              <div class="card-title blue-text"><strong>{{ t.tutorial_series }}</strong></div>
              <p>{{ t.series_summary }}</p>
            </div>
          </div>
      </a>
    </div>
    {% endfor %}
  </div>

{% endblock %}

我們顯示了這個該category下的某個series的標題和摘要。

為了能夠訪問這個html,我們還需要定義main文件夾下的urls.py,來指向這個路徑:

from django.urls import path
from . import views

app_name = main #此處為了urls的命名空間

urlpatterns = [
    path(‘‘, views.homepage, name=homepage),
    path(register/, views.register, name=register),
    path(logout/, views.logout_request, name=logout_request),
    path(login/, views.login_request, name=login_request),
    path(<single_slug>, views.single_slug, name=single_slug),
]

我們可以在admin下自己先定義幾個category和幾個series,我定義了兩個category,分別為Web Development和Data Analysis,定義了兩個Series,分別為Django和Machine Learning,然後到瀏覽器http://127.0.0.1:8000/,刷新頁面:

技術分享圖片

隨便點擊某一個卡片,我這裏點擊第一個Web Development,看到如下界面:

技術分享圖片

繼續點擊,我們看到路徑仍然只有一級:

技術分享圖片

下一節,我們需要繼續定義tutorial這個路徑下顯示的內容,也就是第一個tutorial以及一個滑動條來顯示所有的tutorials,而不是只顯示這麽一行字。

參考鏈接:

[1] https://pythonprogramming.net/working-foreign-keys-django-tutorial/

Anaconda+django寫出第一個web app(十)