まちがって、LT作ってたのでUPしちゃう。(未完)
— views.py書いたら負けだと思っている —
django.conf.settings
$ ./manage.py diffsettings
django.db.models.base.Model
class Tag(models.Model):
value = models.CharField(maxlength=100, )
def __str__(self):
return self.value[:20]
title = property(__str__)
class Admin:
list_display = ("title", )
django.views.generic
- direct_to_template
- redirect_to
URL dispatch
url = view + model + template
urlpatterns += patterns("path_to_view",
(r'^url(?P<url_value>pattern)$', "views_def",
{"queryset": Entry.objects.all(),
"template_name":"blog/index.html"}),
(r'^blog/', include('app.blog.urls')),
)
継承元テンプレートの一部分を書き換える
参照元ファイルの内容を組み込む
default path
<project>/templates/<app_name>/
{% extends "base.html" %} {% load markup %}
{% block content %}
{{ object.content|restructuredtext }}
{{ object.add_date|date:"r" }}
<a href="/">[Back]</a>
{% endblock %}
{% block footer %}
{% include "navi.html" %}
{% endblock %}
class Entry(models.Model):
content = models.TextField(blank=False)
tag = models.ManyToManyField( \
Tag, blank=True, editable=False)
add_date = models.DateTimeField( \
auto_now_add=True, editable=False)
mod_date = models.DateTimeField( \
auto_now=True, editable=False)
class Entry(models.Model):
...
def save(self):
super(Entry, self).save()
for tag in self._title_to_tags():
obj, created = \
Tag.objects.get_or_create(value=tag)
self.tag.add(obj)
class Tag(models.Model):
value = models.CharField(maxlength=100, \
unique=True, blank=False)
def __str__(self):
return self.value
class Entry(models.Model):
...
def _title(self):
line = self._title_line()
if len(line) >= 2:
return ":".join(line[1:])
return line[0]
title = property(_title)
http://django.g.hatena.ne.jp/ Voluntas/20061214/p1 http://code.djangoproject.com/wiki/XML-RPC http://code.djangoproject.com/wiki/JSON-RPC http://www.freenet.org.nz/dojo/pyjson/


$ ./manage.py shell
Python 2.4.4 (#1, Oct 18 2006, 10:34:39)
Type "copyright", "credits" or "license" for more information.
IPython 0.7.3 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: from django.conf import settings
In [2]: settings?
Type: LazySettings
Base Class: <class 'django.conf.LazySettings'>
String Form: <django.conf.LazySettings object at 0x1074d70>
Namespace: Interactive
Docstring:
A lazy proxy for either global Django settings or a custom settings object.
...
In [3]: settings.<TAB-KEY>
Display all 101 possibilities? (y or n)
settings.ABSOLUTE_URL_OVERRIDES
settings.ADMINS
settings.ADMIN_FOR
settings.ADMIN_MEDIA_PREFIX
settings.ALLOWED_INCLUDE_ROOTS
settings.APPEND_SLASH
--More--
HTTP Headers
XMLHttpRequest monitoring
Template Debug
$ ./manage.py syncdb
$ ./manage.py runserver
$ ./manage.py test (<app>)
$ ./manage.py reset <app>
$ sqlite3 my.db .dump >mydb.sql
$ sqlite3 my.db <mydb.sql
<proj>/<app>/sql/ <model>(.<dbtype>).sql
$ ./manage.py test
Creating test database...
...
Installing index for admin.LogEntry model
....
Ran 4 tests in 8.030s
OK
Destroying test database...
20 sec (r4525)
=>
3 sec (r4672)
(※当社比 6倍)
# -*- coding: utf-8 -*-
"""
>>> from django.test.client import Client
>>> from BeautifulSoup import BeautifulSoup
>>> c = Client()
>>> response = c.get("/")
>>> BeautifulSoup(response.content).html.title
<title>Djangoと日本の仲間たち</title>
"""
イイ!
http://127.0.0.1:8000/notfound
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/notfound
http://127.0.0.1:8000/notemplate
TemplateDoesNotExist at /notemplate
blog/index.html
Request Method: GET
Request URL: http://127.0.0.1:8000/notemplate
Exception Type: TemplateDoesNotExist
Exception Value: blog/index.html
File "/path-to/<prje>/<app>/tests.py", line 10, in <prje>.<app>.tests
Failed example:
for url in checklist.keys(): #テンプレテスト
response = c.get(url)
if response.template.name != checklist[url]:
url, checklist[url], response.template.name
Exception raised:
...
TemplateDoesNotExist: 500.html
<prject>/templates/
import os.path
DEBUG = (False, True)[0]
if os.path.exists("../_debug"):
DEBUG = (False, True)[1]
$ touch ../_debug
$ rm ../_debug
import os.path
_proj_name = \
os.path.split(os.path.abspath(""))[-1]
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = \
os.path.abspath('../db/%s.db' % _proj_name)
import os.path
TEMPLATE_DIRS = (
os.path.abspath('templates').replace(os.sep,"/"),
)
import sys
CUSTOM_TEST = False
if sys.argv[1] == "test":
CUSTOM_TEST = True
if CUSTOM_TEST:
CACHE_BACKEND = 'dummy:///'
t = []
for i in MIDDLEWARE_CLASSES:
if i != "django.middleware.cache.CacheMiddleware":
t.append(i)
MIDDLEWARE_CLASSES = tuple(t)
if DEBUG:
import imp
_optional_settings = "_settings"
_settings = None
try:
f, fn, desc = imp.find_module(_optional_settings, ["../"])
_settings = imp.load_module(_optional_settings, f, fn, desc)
except ImportError:
pass
if _settings:
for key in _settings.__dict__.keys():
if key[0] != "_":
vars()[key] = _settings.__dict__[key]
http://ymasuda.jp/python/ django/docs/settings.html
settings.ABSOLUTE_URL_OVERRIDES
settings.ADMINS
settings.ADMIN_FOR
settings.ADMIN_MEDIA_PREFIX
settings.ALLOWED_INCLUDE_ROOTS
settings.APPEND_SLASH
settings.AUTHENTICATION_BACKENDS
settings.AUTH_PROFILE_MODULE
settings.BANNED_IPS
settings.BUILDING_DOCS
settings.CACHE_BACKEND
settings.CACHE_MIDDLEWARE_ANONYMOUS_ONLY
settings.CACHE_MIDDLEWARE_KEY_PREFIX
settings.CACHE_MIDDLEWARE_SECONDS
settings.COMMENTS_ALLOW_PROFANITIES
settings.COMMENTS_BANNED_USERS_GROUP
settings.COMMENTS_FIRST_FEW
settings.COMMENTS_MODERATORS_GROUP
settings.COMMENTS_SKETCHY_USERS_GROUP
settings.DATABASE_ENGINE
settings.DATABASE_HOST
settings.DATABASE_NAME
settings.DATABASE_OPTIONS
settings.DATABASE_PASSWORD
settings.DATABASE_PORT
settings.DATABASE_USER
settings.DATETIME_FORMAT
settings.DATE_FORMAT
settings.DEBUG
settings.DEFAULT_CHARSET
settings.DEFAULT_CONTENT_TYPE
settings.DEFAULT_FROM_EMAIL
settings.DISALLOWED_USER_AGENTS
settings.EMAIL_HOST
settings.EMAIL_HOST_PASSWORD
settings.EMAIL_HOST_USER
settings.EMAIL_PORT
settings.EMAIL_SUBJECT_PREFIX
settings.ENABLE_PSYCO
settings.FIXTURE_DIRS
settings.IGNORABLE_404_ENDS
settings.IGNORABLE_404_STARTS
settings.INSTALLED_APPS
settings.INTERNAL_IPS
settings.JING_PATH
settings.LANGUAGES
settings.LANGUAGES_BIDI
settings.LANGUAGE_CODE
settings.LOCALE_PATHS
settings.MANAGERS
settings.MEDIA_ROOT
settings.MEDIA_URL
settings.MIDDLEWARE_CLASSES
settings.MONTH_DAY_FORMAT
settings.PREPEND_WWW
settings.PROFANITIES_LIST
settings.RESTRUCTUREDTEXT_FILTER_SETTINGS
settings.ROOT_URLCONF
settings.SECRET_KEY
settings.SEND_BROKEN_LINK_EMAILS
settings.SERIALIZATION_MODULES
settings.SERVER_EMAIL
settings.SESSION_COOKIE_AGE
settings.SESSION_COOKIE_DOMAIN
settings.SESSION_COOKIE_NAME
settings.SESSION_COOKIE_SECURE
settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
settings.SESSION_SAVE_EVERY_REQUEST
settings.SETTINGS_MODULE
settings.SITE_ID
settings.TEMPLATE_CONTEXT_PROCESSORS
settings.TEMPLATE_DEBUG
settings.TEMPLATE_DIRS
settings.TEMPLATE_LOADERS
settings.TEMPLATE_STRING_IF_INVALID
settings.TESTS_DATABASE_NAME
settings.TEST_DATABASE_NAME
settings.TEST_RUNNER
settings.TIME_FORMAT
settings.TIME_ZONE
settings.TRANSACTIONS_MANAGED
settings.URL_VALIDATOR_USER_AGENT
settings.USE_ETAGS
settings.USE_I18N
settings.YEAR_MONTH_FORMAT
settings.k
settings.AUTH_PROFILE_MODULE
settings.BUILDING_DOCS
settings.FIXTURE_DIRS
settings.RESTRUCTUREDTEXT_FILTER_SETTINGS
settings.SERIALIZATION_MODULES
settings.k
DjangoのUserモデルを拡張する
http://blog.monospace.jp/2006/08/01/ django-extending-usermodel/
RESTRUCTUREDTEXT_FILTER_SETTINGS = {
'doctitle_xform': False,
}
$ cd django_trunk
$ grep "settings\.[A-Z]?*" **/*.py |wc -l
1554
$ grep "getattr(settings" **/*.py |wc -l
17