创建第一个Django app-part3

编写更多的视图

编辑polls/views.py

点击查看代码
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
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)

编辑polls/urls.py

点击查看代码
from os import name
from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:question_id>/", views.detail, name="detail"),
    path("<int:question_id>/results/", views.results, name="results"),
    path("<int:question_id>/vote/", views.vote, name="vote"),
]

修改polls/views.py中的index方法

from django.shortcuts import render
from django.http import HttpResponse
from .models import Question

# Create your views here.
def index(request):
    lastest_question_list = Question.objects.order_by("-pub_date")[:5]
    output = ", ".join([q.question_text for q in lastest_question_list])
    return HttpResponse(output)

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)

Template的使用

设置template, 新建文件 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 %}

修改polls/views.py中的index方法

点击查看代码
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader

# Create your views here.
def index(request):
    lastest_question_list = Question.objects.order_by("-pub_date")[:5]
    template = loader.get_template("polls/index.html")
    context = {
        "latest_question_list": lastest_question_list
    }
    return HttpResponse(template.render(context, request))

使用render

点击查看代码
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader

# Create your views here.
def index(request):
    lastest_question_list = Question.objects.order_by("-pub_date")[:5]
    context = {
        "latest_question_list": lastest_question_list
    }
    return render(request, "polls/index.html", context)

404异常, 修改polls/views.py 中的 detail方法

点击查看代码
from django.http.response import Http404
from django.shortcuts import render
from django.http import HttpResponse
from .models import Question
from django.template import loader

def detail(request, question_id):
    try:
        question = Question.objects.get(pk = question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")

    return render(request, 'polls/detail.html', {"question": question})

detail.html

点击查看代码
{{question}}

404异常代码的简写

点击查看代码
from django.http.response import Http404
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from .models import Question
from django.template import loader

def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)

    return render(request, 'polls/detail.html', {"question": question})

Template中的tag-url

修改detail.html

点击查看代码
<h1>{{ question.question_text }}</h1>

<url>
    {% for choice in question.choice_set.all%}
        <li>{{ choice.choice_text }}</li>
    {% endfor %}
</url>

修改index.html, 移除hardcode。detail 为那么属性的值

点击查看代码
{% if latest_question_list %}
    <ul>
        {% for question in latest_question_list %}
            <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
        {% endfor %}
    </ul>
{% else %}
    <p>No polls are available</p>
{% endif %}
posted @ 2023-07-01 15:23  人要靠自己you  阅读(33)  评论(0)    收藏  举报