使用slugs生成专用URL

时间:2014-10-14 14:39:58

标签: python django django-views url-routing slug

我在过去的时间问过如何生成一个具有类似特征的网址,从你说的ID开始,最好使用slu to来做到这一点。在这个时候,我想要用slugs生成dinamics url。我的目标是获得这个结果:

我有五种产品,我在models.py中指定了卡片(Ysera,Neltharion,Nozdormu,Alexstrasza,Malygos)。我需要每个产品的相应网址:

本地主机:8000 /卡/伊瑟拉

本地主机:8000 /卡/奈萨里奥

localhost:8000 / card / nozdormu ...等。

我尝试生成这些网址,但我不知道我是否做了很好的命令应用,要么我不知道如何指定身份证像卡的主要名称(ysera,neltharion ......) 。我试图按照这个社区中发布的答案稍微盲目一点,这是我的“重新配置”:

这是我的views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext
from dracoin.apps.synopticup.models import card
from dracoin.apps.home.forms import ContactForm,LoginForm
from django.core.mail import EmailMultiAlternatives

from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect

def shop(request):
    tarj = card.objects.filter(status=True)
    ctx = {'tarjetas':tarj}
    return render_to_response('home/shop.html',ctx,context_instance=RequestContext(request))


def singleCard(request, slug, id):
    try:
        tarj = card.objects.get(slug=slug, id=id_tarj)
    except ObjectDoesNotExist:
        tarj = get_object_or_404(card, id=id_tarj)
        return render_to_response('home/singleCard.html',ctx,context_instance=RequestContext(request))

我的urls.py(我有app的urls.py和主urls.py):

url(r'^card/(?P<slug>[-\w]+)/(?P<id_tarj>\d+)/$','dracoin.apps.home.views.singleCard',name='vista_single_card'),

我的models.py:

class card(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField(max_length=300)
    status = models.BooleanField(default=True)

    def __unicode__(self):
        return self.nombre

我所有卡的常用模板:

{% extends 'base.html' %}
{% block title %} Tarjeta {{card.nombre}} {% endblock %}
{% block content %}

<h1>{{ card.nombre }}</h1><br> 
<p> {{ card.descripcion }}</p>        

{% endblock %}

我不知道是否发现了我在views.py中构建的slug,我确信urls.py很糟糕,但我不知道如何构建它?

如果我编辑自己的问题以延长它,请原谅我。最近我正在尝试学习django,我的学习中有很多空白

提前道歉我的广泛问题,如果我忽略了什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

这一行:

tarj = card.objects.get(slug=slug, id=id_tarj)

尝试加载card字段设置为id的{​​{1}}对象,id_tarj字段设置为slug。您的模型没有名为slug的字段。您需要添加一个。

一个好的候选人是slug - https://docs.djangoproject.com/en/dev/ref/models/fields/#slugfield

您需要确保您的slug字段在每种情况下都包含正确的值。