#django
#django
Вопрос:
Это мой первый проект с Django, я хочу воссоздать свой статический сайт HTML / CSS / js на динамический сайт с панелью администратора. Тем не менее, мне трудно понять представления / URL-адреса.В моем индексе у меня есть основные новости, события, мини-новости — 3 категории. Я могу отобразить основные новости, однако я не уверен, что использовать в качестве «возврата» для остальных 2 (все 3 находятся на странице «принадлежит индексу») В настоящее время у меня есть «индекс», но не показывает события / новости.
страницы>view.py
from django.shortcuts import render, redirect, get_object_or_404
from mainnews.models import Mainnews
from events.models import Event
from mininews.models import Mini
# Create your views here.
def home_view(request):
main_news = Mainnews.objects.order_by('-publish_date').filter(is_published = True)[:1]
context = {
'main_news' : main_news
}
return render(request, 'index.html', context)
def event_view(request):
events = Event.objects.order_by('-publish_date').filter(is_published = True)[:3]
context = {
'events' : events
}
return render(request, 'index.html', context)
def mini_view(request):
mini_news = Mini.objects.order_by('-publish_date').filter(is_published = True)[:4]
context = {
'mini_news' : mini_news
}
return render(request, 'index.html', context)
главная>urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from pages.views import home_view, event_view, mini_view
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
path('', event_view, name = 'home'),
path('', mini_view, name = 'home'),
] static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
вот как это выглядит в html
{% block content %}
<!-- Section 2 News and Events -->
<div id="news-container">
<div class="jumbo-news">
{%if main_news%}
{% for obj in main_news%}
<img id = 'jumboImgUrl' class='jumbo-img'
src="{{ obj.image.url }}">
<h2 id = 'jumboTitle' class='jumbo-title'>{{ obj.title }}</h2>
<h4 id = 'jumboDescription' class='jumbo-parag'>{{ obj.description }}</h4>
{% endfor %}
{% else %}
<div class = 'col-md-12'>
<p>No news available</p>
</div>
{% endif %}
</div>
<div id="events" class='eventBox'>
<h3 class='events-title'>Events <i class="far fa-calendar-alt"></i></h3>
<div id = 'allEvents' class='all-events'>
{% if events%}
{% for event in events %}
<div id='event' class='event'>
<div class='event-date'>
<h4 class='date-helper'>{{ event.days }}</h4>
<div class='event-line'></div>
<h4 class = 'date-month'>{{ event.month }}</h4>
</div>
<div class = 'paragrah'><p id = 'eventDesc' class='event-text'>{{ event.description}}</p></div>
</div>
{% endfor %}
{% else %}
<div>
<p>No events available</p>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Ответ №1:
хорошо, в django url должен быть связан только с одной функцией или классом (не имеет значения) в вашем views.py . но вы соединяете 3 разных пути (рассмотрим один, хотя и с одинаковыми именами) с 3 разными путями. представьте это, если я задам запрос для вашего сайта для вашей домашней страницы, например www.yoursite.come/
, как это сделатьвы хотите разделить эти три и как выбрать, какой из них использовать. но вы можете задать столько запросов, сколько захотите, для стольких моделей, которые у вас есть в одной единственной функции, как это :
def home_view(request):
main_news = Mainnews.objects.order_by('publish_date').filter(is_published = True)[:1]
events = Event.objects.all().order_by('-publish_date').filter(is_published = True)[:3]
mini_news = Mini.objects.order_by('-publish_date').filter(is_published = True)[:4]
context = {
'main_news' : main_news,
'events' : events,
'mini_news': mini_news
}
return render(request, 'index.html', context)
и в вашем URL
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
а затем в вашем шаблоне покажите все это. и если вы хотите показать это отдельно, вы можете сохранить свой код и просто изменить URL на этот
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
path('event_view/', event_view, name = 'event_view'),
path('mini_view', mini_view, name = 'mini_view'),
]
Ответ №2:
def home_view(request):
main_news = Mainnews.objects.order_by('-publish_date').filter(is_published = True)[:1]
events = Event.objects.all().order_by('-publish_date').filter(is_published = True)[:3]
mini_news = Mini.objects.order_by('-publish_date').filter(is_published = True)[:4]
context = {
'main_news' : main_news,
'events' : events,
'mini_news': mini_news
}
return render(request, 'index.html', context)