Django项目11

准备工作

service mysqld start
create database web11 default charset utf8;
django-admin.py startproject web11
django-admin.py startapp news
templates创建
admin.py创建

settings

DATABASES = { 
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'web09',                 
        'USER': 'root',                     
        'PASSWORD': '',                  
        'HOST': '',                     
        'PORT': '',                    
    }   
}

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'news',
    'django.contrib.admin',              
)

models,两个数据库表,

[分类][Category](news_category)表(导航栏)

[新闻][New](news_new)表(标题和内容)

from django.db import models
class Category(models.Model):
    name = models.CharField(max_length=30)
    def __unicode__(self):
        return self.name

class New(models.Model):
    title = models.CharField(max_length = 60) 
    content = models.TextField()
    category = models.ForeignKey(Category)
    def __unicode__(self):
        return self.title

urls

from django.conf.urls.defaults import patterns, include, url 

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
     url(r'^admin/', include(admin.site.urls)),
     url(r'^index/$','news.views.index'),                            #首页,index,映射index方法里的东西
     url(r'^disp/(\d{1,5})/$','news.views.disp'),                    #某类,disp/id/,映射disp方法里的东西
     url(r'^disp_new/(\d{1,5})/(\d{1,5})/$','news.views.disp_new'),  #新闻,disp_new/category_id/new_id/,映射disp_new方法里的东西
)

views,三个方法,映射三个不同类的地址。

index:首页默认显示

disp:点击导航栏不同标签的页面

disp_new:点击新闻标题后的页面

教训:模板需要你多少东西,你就得渲染多少东西回去给他!否则会不显示。

from news.models import Category,New                            #导入models里的两个数据表:Category,New
from django.shortcuts import render_to_response

def index(req):  
    categorys = Category.objects.all()                          #得到所有的导航分类[nav]
    news = New.objects.filter(category=categorys[0])            #从New(新闻)表中,筛选符合[New表category字段 = Category表第1项]这条件的,显示[right,left]
    return render_to_response('index.html',{'categorys':categorys,'news':news}) #渲染上面两行得到的东西[导航,新闻]

def disp(req,category_id):                                               #从urls里传过来的参数id,叫什么都可以
    categorys = Category.objects.all()                          #得到所有的导航分类[nav]
    category=Category.objects.get(id=category_id)                        #从所有分类里得到id符合参数id的分类,下一行要用
    news = New.objects.filter(category=category)                #从新闻表里筛选符合[New表的category字段 = 上一行得到的东西()[left]
    return render_to_response('index.html',{'categorys':categorys,'news':news,'category':category})#渲染:模板需要多少,就渲染多少!!!

def disp_new(req,category_id,new_id):                           #从urls里传过来的参数category_id,new_id,叫什么都可以
    categorys = Category.objects.all()                          #得到所有的导航分类[nav]
    category=Category.objects.get(id=category_id)               #从分类表里得到id符合参数category_id的分类,下一行要用
    news = New.objects.filter(category=category)                #从新闻表里筛选符合[New表的category字段 = 上一行得到的东西]这个条件的,显示[left]
    new =  New.objects.get(id = new_id)                         #从新闻表里得到id符合参数new_id的新闻,并显示[right]
    return render_to_response('index.html',{'categorys':categorys,'news':news,'new':new})#渲染

base模板

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title></title>
	<style>
		#main{width: 80%;border:1px solid black;margin: 1px auto;}
		#nav{height: 20px;border:1px solid blue;background-color: yellow;}
		#bread{height: 20px}
		#left{width: 30%;float: left;border:1px solid blue;}
		#right{width: 65%;float: right;border:1px solid green;}
		#nav li{display: inline-block;width: 80px}
		#right .title{color: red;}
	</style>
</head>
<body>
<div id="main">
	<div id="nav">{%block nav%}{%endblock%}</div>       <!-- 导航栏块 -->
	<div id="bread">{%block bread%}{%endblock%}</div>   <!-- 面包屑块 -->
	<div id="left">{%block left%}{%endblock%}</div>     <!-- 标题块 -->
	<div id="right">{%block right%}{%endblock%}</div>   <!-- 内容块 -->
</div>
</body>
</html>

index页面,继承base

{%extends 'base.html'%}

{%block nav%}
{% for c in categorys %}                                 <!-- (index方法里)从分类表里遍历出每个分类,然后操作 -->
<li><a href='/disp/{{c.id}}'>{{c.name}}</a></li>  <!-- 点击了 c.name ,就跳到 此name对应的c.id 映射的网址,而且这个id作为参数传入views.disp 。跳到disp页面以后,就调用(view.disp方法)-->
{%endfor%}
{%endblock%}

{%block left%}
{%for n in news%}                                             <!--(index方法里)被筛选出的news,再遍历之,然后操作-->
<li><a href='/disp_new/{{n.category_id}}/{{n.id}}/' >{{n.title}}</a>></li> <!--点击了 n.title,就跳到此title对应的n.id 映射的网址 -->
{%endfor%}
{%endblock%}

{%block bread%}
<a href="/index" >首页</a>
>> 
<a href='/disp/{{caregory.id}}/' >{{category.name}}</a> <!--记得要在views里渲染哦-->
>>
<a href='/disp_new/{{new.category_id}}/{{new.id}}/' >{{new.title}}</a> <!--记得要在views里渲染哦-->
{%endblock%}

{%block right%}
<div class="title">{{new.title|default:news.0.title}}</div>    <!-- 内容区 -->
<div class="content">{{new.content|default:news.0.content}}</div> <!-- 内容区 -->
{%endblock%}

收尾工作

python manage.py syncdb
python manage.py runserver
admin面板里添加数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值