ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Anaconda+django写出第一个web app(十)

2019-02-25 23:03:11  阅读:337  来源: 互联网

标签:category web views series app django single slug tutorial


今天继续学习外键的使用。

当我们有了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/

标签:category,web,views,series,app,django,single,slug,tutorial
来源: https://www.cnblogs.com/yunxiaofei/p/10434463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有