User Tools

Site Tools


programming:django

This is an old revision of the document!


Create a project

django-admin startproject mysite
python manage.py migrate

Create a super user account, which can login via http://localhost:8000/admin

python manage.py createsuperuser

Launch the server

python manage.py runserver

Create a app inside a project

Everything are apps. Each app has it's own subfolder. To create a app sceleton run

python manage.py startapp polls

Register URL

In the polls/urls.py file include the following code:

polls/urls.py
polls/urls.py¶
 
from django.urls import path
 
from . import views
 
urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    # ex: /polls/5/
    path('<int:question_id>/', views.detail, name='detail'),
    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

The corresponding view looks like this. The name correspond with the method name of views.py.

polls/views.py
from django.shortcuts import render
from django.http import HttpResponse
 
 
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
 
 
def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)
 
def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)
 
def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

Now we need to add this url to our project:

mysite/urls.py
from django.contrib import admin
from django.urls import include, path
 
urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

Templates

Templates are in the subfolder of the app. e.g. `mysite/polls/templates/*`

polls/templates/polls/index.html
{% if latest_question_list %}
    <ul>
    {% for question in latest_question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

To render such a templates you need to do response the corresponding HttpResponse:

polls/view.py
  latest_question_list = Question.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = {
        'latest_question_list': latest_question_list,
    }
    return HttpResponse(template.render(context, request))

or in short

polls/view.py
from django.shortcuts import render
 
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

Namespace url patterns

Define the namespace by adding `app_name = <namespace>` inside of urls.py.

polls/urls.py
app_name = 'polls'
urlpatterns = [
    # ex: /polls/
    path('<int:question_id>/', views.detail, name ='detail');
]

Then you need to specfiy the namespace in `{% url %}` of the template like this

polls/templates/polls/detail.html
        <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

Static files

Static files can be placed in the `static/` folder of each app. Then refere to them inside the template like:

polls/templates/polls/index.html
{% load  static %}
<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">

Mixed in for django_tables2

class UsefulMixin(tables.Table):
    age = AgeColumn()
    options = tables.Column(empty_values=())
 
    def render_options(self):
        return format_html('<button>DELETE</button>')
#    age = tables.Column()
 
class InstanceTable(UsefulMixin, tables.Table):
    age = AgeColumn()
    opt = tables.LinkColumn('delete_instance', args=[A('pk')], text='delete')
    class Meta:
        model = Instance
        template_name = 'django_tables2/bootstrap.html'

To make links of a value https://django-tables2.readthedocs.io/en/latest/pages/api-reference.html?highlight=LinkColumn#django_tables2.columns.LinkColumn

Update database

Change the model file accordingly. doc:makemigrations

python manage.py makemigrations
python manage.py migrate

Django Rest Framework

programming/django.1553264229.txt.gz · Last modified: by clemix

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki