Ravi de vous rencontrer, tout le monde. Je publierai le processus de création d'une application de vote (sondage) en utilisant Django comme mémorandum. Puisque je suis un débutant de Qiita, veuillez comprendre qu'il peut être difficile à lire.
séries
View of MVC model est un programme qui renvoie l'écran à afficher à l'utilisateur.
Dans l'application de vote, créez les quatre vues suivantes:
Page "Index" des questions - Afficher quelques-unes des dernières questions Page "Détails" de la question - Afficher le texte de la question et le formulaire de vote sans afficher les résultats Page "Résultats" de la question - Afficher les résultats d'une question spécifique Page de vote - Acceptez la sélection de questions spécifiques comme vote
Au fait, la fonction Django qui obtient la vue depuis l'URL s'appelle URLconf.
Implémentez l'opération suivante à l'aide d'URLconf.
L'utilisateur accède à "/ polls / 100 /"
→ Lisez polls / urls.py pour faire correspondre path.'polls / 'dans config / urls.py
→ Renvoie les détails (request =
polls/views.py
# Create your views here.
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)
question_id = 100 est pris en sandwich entre <> et capturé à partir d'une partie de l'URL.
polls/urls.py
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'),
]
Avez-vous déjà fait quelque chose qui n'a pas fonctionné ... Cela semble différent. "En fait fonctionne" semble signifier "implémenter le traitement HttpRequest et le traitement des exceptions pour réaliser un comportement qui est en ligne avec le fonctionnement réel".
Ajoutez ce qui suit à la vue.
polls/views.py
from .models import Question
from django.template import loader
def index(request):
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))
Transmettez la dernière_question_list à polls / index.html avec "template.render (context, request)" et effectuez le rendu. Selon les spécifications du loader.get_template de Django, il semble que le modèle de rendu soit recherché dans le répertoire ".templates / app name (polls)".
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 %}
Vous pouvez également créer un raccourci. Importez le rendu de django.shortcut.
polls/views.py
from .models import Question
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)
Vous devriez voir un écran comme celui-ci.
Commencez par créer une vue.
polls/views.py
from django.http import HttpResponse, Http404
from .models import Question
from django.shortcuts import render
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404("Question dose not exist")
return render(request, 'polls/detail.html', {'question': question})
Puis HTML
polls/templates/polls/detail.html
{{question}}
Vérifiez le fonctionnement.
Puisque question_id = 5 existe, «http://127.0.0.1:8000/polls/5/» s'affiche comme suit. ..
Puisque question_id = 999 n'existe pas, "[http://127.0.0.1:8000/polls/999/ (http://127.0.0.1:8000/polls/999/)" s'affiche comme suit. .. Une exception est détectée et «Question dose not exist» s'affiche.
Marquez le html sur la page de détails.
polls/templates/polls/detail.html
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>
"Http://127.0.0.1:8000/polls/5/" s'affiche à nouveau.
Rendez la variable de partie URL. En effet, le modèle doit être modifié lorsque l'URL est modifiée.
Comme mécanisme, vous avez spécifié name = 'detail' dans polls / urls.py> urlpatterns> path. Chargez-le dans polls / templates / polls / index.html. Ensuite, l'URL associée à name = 'detail' sera lue.
polls/templates/polls/index.html
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
polls/urls.py
urlpatterns = [
***
path('<int:question_id>/', views.detail, name='detail'),
***
]
Il n'y a pas de problème d'affichage.
L'application que j'ai créée cette fois n'est qu'une application de sondage. Si vous créez plusieurs applications, elles peuvent avoir une vue détaillée. Pour récupérer la vue détaillée de l'application de sondages, créez et spécifiez un espace de noms.
Pour créer un espace de noms, ajoutez app_name = <nom de l'application> à <nom de l'application> / templates / <nom de l'application> /index.html.
polls/urls.py
app_name = 'polls'
urlpatterns = [
***
path('<int:question_id>/', views.detail, name='detail'),
***
]
La spécification d'URL qui spécifie l'espace de noms est <nom de l'application>: détail.
polls/templates/polls/index.html
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
C'est tout pour aujourd'hui. Merci beaucoup.
Recommended Posts