下面是我要做的事情:
- 很少有电视频道作为图像链接,它们会在频道内有一些信息
- 我设法把电视频道创建成一个列表,它们看起来像一个链接,但工作起来不像链接
我为每个通道创建了段塞区域,该区域取自其自己的名称并自动生成段塞。使用get_absolute_url,我在下面的代码中获取它的url;
这是我的型号:
class Channels(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, verbose_name="Tv Kanalı")
logo = models.ImageField(upload_to="channels/images/", verbose_name="Tv Logosu", blank=False)
slug = models.SlugField(null=True, unique=True, editable=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Channels, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('channel-list:campaigns', kwargs={'page_slug': self.slug})
这是我的主要网址:
urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include(('tvekstra.apps.core.urls', 'home'), namespace='home')),
url(r'^user/', include(('tvekstra.apps.user.urls', 'login'), namespace='user')),
url(r'^channels/', include(('tvekstra.apps.tvchannels.urls', 'main'), namespace="channel-list")),
这是通道urls:
urlpatterns = [
url(r'', views.channel_list, name='channels'),
url(r'^(?P<page_slug>[-w]+)/$', views.campaign_list, name='campaigns'),
]
这是我的观点:
def channel_list(request):
channels = Channels.objects.all()
return render(request, 'channel.list.html', {'channels': channels})
def campaign_list(request, page_slug):
channel = get_object_or_404(Channels, slug=page_slug)
return render(request, 'campaign.list.html', {'channel': channel})
这是我的模板:
{% for channel in channels %}
<div class="col-3 text-center channels">
<a href="{{ channel.get_absolute_url }}">
<img src="{{ channel.get_image }}" alt="Channel Image" class="ch-img">
{{ channel.name }}
</a>
</div>
{% endfor %}
正如您所看到的,a href是channel的getabsoluteur方法。它创建了html,但没有前进页面。我认为由于某种原因,请求援助的观点不起作用。。。
url(r'',
与''
匹配,但也与/channels/fox/
和/something-else/
匹配。
您可以通过在正则表达式中添加^$
来修复它。
url(r'^$', views.channel_list, name='channels'),
在Django 2.0+中,最好使用re_path
,因为url
在Django3.1:中已被弃用
re_path(r'^$', views.channel_list, name='channels'),
使用path
:会更简单
path('', views.channel_list, name='channels'),