User Tools

Site Tools


programming:django

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
programming:django [2018/11/26 10:57] clemixprogramming:django [2019/04/24 16:22] (current) – [Static files] clemix
Line 1: Line 1:
-== Create a project ==+ 
 +==== Create a project ====
 <code bash> <code bash>
 django-admin startproject mysite django-admin startproject mysite
 +python manage.py migrate
 +</code>
 +
 +Create a super user account, which can login via http://localhost:8000/admin
 +<code bash>
 +python manage.py createsuperuser
 </code> </code>
  
-== Launch the server ==+==== Launch the server ====
 <code lang=bash> <code lang=bash>
 python manage.py runserver python manage.py runserver
 </code> </code>
  
-== Create a app inside a project==+==== Create a app inside a project ====
 Everything are apps. Each app has it's own subfolder. To create a app sceleton run Everything are apps. Each app has it's own subfolder. To create a app sceleton run
 <code lang=bash> <code lang=bash>
Line 15: Line 22:
 </code> </code>
  
-== Register URL ==+==== Register URL ====
 In the polls/urls.py file include the following code: In the polls/urls.py file include the following code:
 <code python polls/urls.py> <code python polls/urls.py>
Line 69: Line 76:
 </code> </code>
  
 +==== Templates ====
 +Templates are in the subfolder of the app. e.g. `mysite/polls/templates/*`
 +<code html 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 %}
 +</code>
 +
 +To render such a templates you need to do response the corresponding HttpResponse:
 +<code python 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))
 +</code>
 +
 +or in short
 +<code python 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)
 +</code>
 +
 +
 +==== Namespace url patterns ====
 +Define the namespace by adding `app_name = <namespace>` inside of urls.py.
 +<code python polls/urls.py>
 +app_name = 'polls'
 +urlpatterns = [
 +    # ex: /polls/
 +    path('<int:question_id>/', views.detail, name ='detail');
 +]
 +</code>
 +Then you need to specfiy the namespace in `{% url %}` of the template like this
 +<code html polls/templates/polls/detail.html>
 +        <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
 +</code>
 +
 +==== Static files ====
 +Static files can be placed in the `static/` folder of each app.
 +Then refere to them inside the template like:
 +<code html polls/templates/polls/index.html>
 +{% load  static %}
 +<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">
 +</code>
 +
 +Run this command to store static files in proper folder:
 +<code bash>
 +python manage.py collectstatic
 +</code>
 +==== django_tables2 ====
 +=== Mixedin ===
 +
 +<code python>
 +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'
 +
 +</code>
 +
 +===  Custom tables.Column ===
 +<code python>
 +class AgeColumn(tables.Column):
 +    def render(self, record):
 +        diff = record.age()
 +        color = ''
 +        if (diff.seconds > 60 * 60 ):
 +            color = 'red'
 +        else:
 +            color = 'green'
 +        return format_html('<span style="color:{}">{}</span>',color, diff)
 +
 +
 +class InstanceTable(tables.Table):
 +    age = AgeColumn()
 +    opt = tables.LinkColumn('delete_instance', args=[A('pk')], text='delete')
 +    class Meta:
 +        model = Instance
 +        template_name = 'django_tables2/bootstrap.html'
 +</code>
 +
 +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. [[https://docs.djangoproject.com/en/2.1/ref/django-admin/#makemigrations|doc:makemigrations]]
 +<code bash>
 +python manage.py makemigrations
 +python manage.py migrate
 +</code>
 +
 +==== Bootstrap ====
 +https://www.w3schools.com/bootstrap/default.asp
  
  
 +==== Django Rest Framework ====
 +https://www.django-rest-framework.org/tutorial/quickstart/
  
programming/django.1543226230.txt.gz · Last modified: by clemix

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki