Blog Cover Image

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

有的時候,你無意間遇到的一些故事,會激發你的靈感,改變你的想法,接下來你會用與之前全然不同的觀念去創造屬於你獨特的故事。

Sign @MinaYu.

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

Posted on

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

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

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

也是先讓我摸了一陣子php

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

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

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

再加上很怕把伺服器寫壞

首先

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

用manage.py指令startproject(project)

website

manage.py

project

settings.py

urls.py

wsgi.py

init.py

應該會長這個樣子

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

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

使用 python manage.py 指令 startapp

先開啟一個main 的 app

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

website

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裡的網頁,讓網頁正常顯示唷!