Blog Cover Image

Inspire you to have New thinking, Walk out your unique Road.

Django/Python 不同apps 如何寫進url.py

Posted on Aug 17, 2017

主題蠻抽象的,不過正是剛剛在開發網頁時新學到的

開發網頁的部分,我認為 php 還算是好上手的語法

因為當我的教授在操我網頁這塊時

也是先讓我摸了一陣子 php

直到 deadline 前,才突然叫我改成 django

接著,為了學 django,我就花了很多很多的時間

因為我覺得其實還算挺複雜的

再加上很怕把伺服器寫壞

首先

開好了一個資料夾(website),在裡面灌好 pip, django, python....等之後

用 manage.py 指令 startproject(project)

manage.py

project

settings.py

urls.py

wsgi.py

init.py

應該會長這個樣子

project 裡面會有設定檔, url 跟另外兩個還不知道做什麼的檔案

接下來就要開啟一個一個 app

使用 python manage.py 指令 startapp

先開啟一個 main 的 app

之後整個資料夾的樹會長這樣

manage.py

project

settings.py

urls.py

wsgi.py

init.py

main

view.py

model.py

(應該還有其他的)

template

至於專門放 html 的 template

會跟 main 還有 project 同一層

url.py 跟 settings.py 只會有各一個

但是不同的 app 有不同的 view 和 model

每開一個 app 就需去 settings.py 裡寫上新開的 app

Screen Shot 2017-08-17 at 10.31.52 AM

像是這樣

而 Django 的工作流程,我把他解釋為

url >> view >> model >> template

不過這篇還不會介紹到 model

打開 url.py

通常會在這邊寫出一行一行網頁....

就是 url 網址後面那串(好不專業)

舉一個例子,會看到一行一行像下面這樣的程式碼

Screen Shot 2017-08-17 at 10.34.40 AM

假設這個主網域的網址叫做 www.wordpress.com

那麼這行指令就是當你在網址上打

www.wordpress.com/data_course823/

會跳出另外一個頁面

程式碼的意思就是當你輸入

www.wordpress.com/data_course823/

他會執行後面亮綠色 data_course823 的動作

而這個動作我們會寫在 views.py

打開 views.py

Screen Shot 2017-08-17 at 10.35.29 AM

這裡寫的就是一個一個在 url 輸入的動作

def 定義 data_course823

回傳 data_course823.html

這樣的動作,是沒有牽涉到 model

不要忘了 import 指令唷!

Screen Shot 2017-08-17 at 10.35.52 AM

其實 url.py

一個 project 只會有一個

所以不管是哪個 app 的動作或者網址

都是寫在同樣一個 url.py

萬一有好幾個不同的 app 的話

就需要在 url.py 裡

利用註解跟空行將寫上去的 url 程式碼做一些整理,看起來才不會亂

無論是寫在哪個 app,url 的寫法都是一樣的

url(r'^admin/', include(admin.site.urls)), url(r'^$', index), url(r'^firstweb/', firstweb), url(r'^second/', second), url(r'^third/', third),

通常會將網址和後面的動作取一樣的,以免搞混

接著只要在 url.py 上方 import 不同 app 的 views 就可以了

Screen Shot 2017-08-17 at 10.34.08 AM

這樣不管是在哪個 app 寫好 views, 都能正確的回應 url.py 呼叫的動作囉!

url.py from main.views import _ from test.views import _

url(r'^$', index), url(r'^firstweb/', firstweb), url(r'^second/', second), url(r'^third/', third),

main.views

from django.shortcuts import render_to_response from main.models import *

def index(request): return render_to_response('index.html')

def firstweb(request): return render_to_response('firstweb.html')

test.views

from django.shortcuts import render_to_response from test.models import *

def second(request): return render_to_response('second.html')

def third(request): return render_to_response('third.html')

template 裡要有

index.html

firstweb.html

second.html

third.html

對應的 html 喲!

這樣 views 裡面的動作才能對應 url.py 下的指令

views 的動作才能傳給 template 裡的網頁,讓網頁正常顯示唷!