====== VFOSS News App ======
===== Getting Start =====
* https://code.djangoproject.com/wiki/Tutorials
Useful things
* http://opensource.com/business/15/6/why-ubuntu-developer-portal-moved-djangocms
* news clone: http://arunrocks.com/building-a-hacker-news-clone-in-django-part-1/
Follow this book:
* http://www.tangowithdjango.com/book17/
**Django 1.7 1.9**
Related project:
* multilingual based on dragoman: https://github.com/bitlabstudio/django-multilingual-news/blob/master/multilingual_news/models.py
===== Create a Hello World App =====
Create app
python manage.py startapp vfoss_news
Create a view handler
1 from django.shortcuts import render
2 from django.http import HttpResponse
3
4 def index(request):
5 return HttpResponse("VFOSS news says hey there world!")
Link app urls with the project's urls.
**Note:** django-cms urls must be placed last in the list. Otherwise it will cause 404 error.
9 urlpatterns = i18n_patterns('',
10 url(r'^admin/', include(admin.site.urls)),
11 # python-social-auth
12 url('', include('django.contrib.auth.urls', namespace='auth')),
13 url('', include('social.apps.django_app.urls', namespace='social')),
14 # djangocms-blog
15 url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
16 # vfoss-news
17 url(r'^news/', include('vfoss_news.urls')),
18 # django-cms
19 url(r'^', include('cms.urls')),
20 ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Adding template
mkdir -p templates/vfoss_news
cd templates/vfoss_news
vim index.html
1
2
3
4
5 Rango
6
7
8
9 Rango says...
10 hello world! {{ boldmessage }}
11 About
12
13
14
Update views.py
1 from django.shortcuts import render
2 from django.http import HttpResponse
3 from django.shortcuts import render
4
5 def index(request):
6
7 # Construct a dictionary to pass to the template engine as its context.
8 # Note the key boldmessage is the same as {{ boldmessage }} in the template!
9 context_dict = {'boldmessage': "I am bold font from the context"}
10
11 # Return a rendered response to send to the client.
12 # We make use of the shortcut function to make our lives easier.
13 # Note that the first parameter is the template we wish to use.
14
15 return render(request, 'vfoss_news/index.html', context_dict)
16
==== Create Model ====
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
def __unicode__(self): #For Python 2, use __str__ on Python 3
return self.name
class Page(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
def __unicode__(self): #For Python 2, use __str__ on Python 3
return self.title
==== Migrations ====
python manage.py makemigrations vfoss_news
python mamage.py migrate
**Whenever you add to existing models, you will have to repeat this process running python manage.py makemigrations , and then python manage.py migrate**
==== Django Admin ====
1 from django.contrib import admin
2 from vfoss_news.models import Category, News
3
4 # Register your models here.
5
6 admin.site.register(Category)
7 admin.site.register(News)
===== Model - Template - View =====
==== Basic Workflow: Data Driven Pages ====
There are five main steps that you must undertake to create a data driven webpage in Django.
- First, import the models you wish to use into your application’s views.py file.
- Within the view you wish to use, query the model to get the data you want to present.
- Pass the results from your model into the template’s context.
- Setup your template to present the data to the user in whatever way you wish.
- If you have not done so already, map a URL to your view.
==== Import Model ====
==== Update Index views.py ====
==== Detail views ====
==== Update Category Table with Slug Field ====
Add slug fied to models.py:
from django.template.defaultfilters import slugify
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs)
def __unicode__(self):
return self.name
./manage makemigrations vfoss_news
./manage migrate
Auto populate slug field. Add following to admin.py
from django.contrib import admin
from rango.models import Category, Page
# Add in this class to customized the Admin Interface
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug':('name',)}
# Update the registeration to include this customised interface
admin.site.register(Category, CategoryAdmin)
admin.site.register(Page)
===== Form =====
continue here: http://www.tangowithdjango.com/book17/chapters/forms.html
===== Django-cms Plugin =====
* http://django-cms.readthedocs.org/en/latest/introduction/plugins.html
===== Multilingual Theme =====