这是在前一篇博文的基础上改进的博客,还没有美化页面,暂且学习中就这样吧,以后版本改进中
首先看下具体效果:
127.0.0.1/articles/2014
127.0.0.1/news/articles/2014
上面是两种形式的url mapping,都可以访问,结果一样
只查看2014年的博客;
博客的列表
博客文章的详细页面:
[root@localhost news]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/news
[root@localhost news]# more views.py
from django.shortcuts import render
from django.shortcuts import render_to_response
from news.models import Article
# Create your views here.
def year_archive(request, year):
a_list = Article.objects.filter(pub_date__year=year)
return render_to_response('year_archive.html', {'year': year, 'article_list': a_list})
def list_article(request):
lit_list=Article.objects.all()
return render_to_response('list_article.html',{'literary' : lit_list})
def detail_article(request,serial):
show_detail=Article.objects.filter(id=serial)
return render_to_response('detail_article.html',{'details' : show_detail,'id' : serial})
[root@localhost news]#
[root@localhost news]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/news
[root@localhost news]# more models.py
from django.db import models
#from django.contrib import admin
# Create your models here.
class Reporter(models.Model):
full_name = models.CharField(max_length=70)
def __unicode__(self):
return self.full_name
class Article(models.Model):
pub_date = models.DateField()
headline = models.CharField(max_length=200)
content = models.TextField()
reporter = models.ForeignKey(Reporter)
def __unicode__(self):
return self.headline
#admin.site.register(Reporter,Article)
[root@localhost news]#
[root@localhost news]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/news
[root@localhost news]# more urls.py
#from django.conf.urls import patterns
from django.conf.urls import *
from news.views import year_archive
from news.views import *
urlpatterns = patterns('',
#url(r'^articles/(\d{4})/$', year_archive),
(r'^articles/(\d{4})/$', year_archive),
(r'^articles/list/$', list_article),
(r'^articles/detail/(\d+)/$', detail_article),
(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
)
[root@localhost news]#
目前只用到了前面三个
(r'^articles/(\d{4})/$', year_archive)
匹配到这样的url:127.0.0.1/news/articles/2014
[root@localhost news]# pwd
/root/Desktop/data/download/django/mysite16_5_demo/news
[root@localhost news]# more admin.py
from django.contrib import admin
import models
# Register your models here.
admin.site.register(models.Article)
[root@localhost news]#
[root@localhost news]# cd templates/
[root@localhost templates]# ll
total 16
-rw-r--r--. 1 root root 221 Nov 10 17:23 base.html
-rw-r--r--. 1 root root 311 Nov 10 18:02 detail_article.html
-rw-r--r--. 1 root root 370 Nov 10 18:24 list_article.html
-rw-r--r--. 1 root root 449 Nov 10 18:16 year_archive.html
[root@localhost templates]# more base.html
{% load staticfiles %}
{% block title %}{% endblock %}
{% block content %}{% endblock %}
[root@localhost templates]# more detail_article.html
{% extends "base.html" %}
{% block title %}Articles for {
{ id }}{% endblock %}
{% block content %}
this is my blog article detail
{% for detail in details %}
{
{ detail.headline }}
Published {
{ literary.pub_date|date:"F j, Y" }}
{
{ detail.content }}
{% endfor %}
{% endblock %}
[root@localhost templates]# more list_article.html
{% extends "base.html" %}
{% block title %}Articles for {
{ id }}{% endblock %}
{% block content %}
here is my blogs first version2
{% for literary_list in literary %}
{
{ literary_list.headline }}
Published {
{ literary_list.pub_date|date:"F j, Y" }}
{% endfor %}
{% endblock %}
[root@localhost templates]# more year_archive.html
{% extends "base.html" %}
{% block title %}Articles for {
{ year }}{% endblock %}
{% block content %}
Articles for {
{ year }}
{% for article in article_list %}
{
{ article.headline }}
By {
{ article.reporter.full_name }}
content-------------->>>>>>>
{
{ article.content }}
id is: {
{ article.id }}
Published {
{ article.pub_date|date:"F j, Y" }}
{% endfor %}
{% endblock %}
[root@localhost templates]#
[root@localhost mysite16_5_demo]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/mysite16_5_demo
TEMPLATE_DIRS = (
'/root/Desktop/data/download/django/mysite16_5_demo2/news/templates',
)
如果没设置该目录的话,默认好像会在当前app下的templates目录下寻找,顺序为先在settings.py中设置的目录中寻找,然后才在默认目录
[root@localhost images]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/news/static/images
[root@localhost images]# ll
total 16
-rw-r--r--. 1 root root 14197 Nov 10 17:23 sitelogo.png
[root@localhost images]#
STATIC_URL = '/static/'
{% block content %}{% endblock %}
[root@localhost mysite16_5_demo]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/mysite16_5_demo
[root@localhost mysite16_5_demo]# more settings.py
"""
Django settings for mysite16_5_demo project.
For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'xaa+uyd$dx&$e50m4x=-7&a02gd@)2m!o%kf=ldnf1u4$d$tu^'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True
TEMPLATE_DIRS = (
'/root/Desktop/data/download/django/mysite16_5_demo2/news/templates',
)
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'news',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'mysite16_5_demo.urls'
WSGI_APPLICATION = 'mysite16_5_demo.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/
STATIC_URL = '/static/'
[root@localhost mysite16_5_demo]#
[root@localhost mysite16_5_demo]# pwd
/root/Desktop/data/download/django/mysite16_5_demo2/mysite16_5_demo
[root@localhost mysite16_5_demo]# more urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite16_5_demo.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
url(r'^news/', include('news.urls')),
url(r'^admin/', include(admin.site.urls)),
)
[root@localhost mysite16_5_demo]#
127.0.0.1/articles/2014
这就为什么可以同时匹配到
127.0.0.1/articles/2014
127.0.0.1/news/articles/2014
总结:
在这个过程中遇到过一些问题,皆因自己的不细心导致,没什么需要特别注意的
在python shell中后台操作的过程中,需要先执行,具体解决过程如下:
[root@localhost mysite16_5_demo]# python
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from news.models import Reporter, Article
File "", line 1
from news.models import Reporter, Article
^
IndentationError: unexpected indent
>>> from news.models import Reporter, Article
Traceback (most recent call last):
File "", line 1, in
File "news/models.py", line 1, in
from django.db import models
File "/usr/lib/python2.6/site-packages/django/db/models/__init__.py", line 5, in
from django.db.models.query import Q
File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 17, in
from django.db.models.deletion import Collector
File "/usr/lib/python2.6/site-packages/django/db/models/deletion.py", line 4, in
from django.db.models import signals, sql
File "/usr/lib/python2.6/site-packages/django/db/models/sql/__init__.py", line 4, in
from django.db.models.sql.subqueries import *
File "/usr/lib/python2.6/site-packages/django/db/models/sql/subqueries.py", line 12, in
from django.db.models.sql.query import Query
File "/usr/lib/python2.6/site-packages/django/db/models/sql/query.py", line 22, in
from django.db.models.sql import aggregates as base_aggregates_module
File "/usr/lib/python2.6/site-packages/django/db/models/sql/aggregates.py", line 9, in
ordinal_aggregate_field = IntegerField()
File "/usr/lib/python2.6/site-packages/django/db/models/fields/__init__.py", line 116, in __init__
self.db_tablespace = db_tablespace or settings.DEFAULT_INDEX_TABLESPACE
File "/usr/lib/python2.6/site-packages/django/conf/__init__.py", line 54, in __getattr__
self._setup(name)
File "/usr/lib/python2.6/site-packages/django/conf/__init__.py", line 47, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
>>> from django.conf import settings
>>> settings.configure()
>>> from news.models import Reporter, Article
Traceback (most recent call last):
File "", line 1, in
File "news/models.py", line 1, in
from django.db import models
File "/usr/lib/python2.6/site-packages/django/db/models/__init__.py", line 5, in
from django.db.models.query import Q
File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 17, in
from django.db.models.deletion import Collector
File "/usr/lib/python2.6/site-packages/django/db/models/deletion.py", line 4, in
from django.db.models import signals, sql
ImportError: cannot import name signals
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite16_5_demo.settings")