2014-09-12 74 views
0

我有一个诊疗模式,目前他们的链接看起来像这样的Django 1.6:创建蛞蝓网址

localhost:8000/clinic/1/ 

我想让他们看起来像这样

localhost:8000/clinic/Nice-Medical-Clinic/ 

我想蛞蝓是诊所

这里的名称是models.py

class Clinic(models.Model): 
    name = models.CharField(max_length=500) 
    email = models.EmailField(blank = True, null = True) 
    address = map_fields.AddressField(max_length=200 
    website = models.CharField(max_length=50, blank = True, null = True) 
    submitted_on = models.DateTimeField(auto_now_add=True, null = True, blank = True) 

    def get_absolute_url(self): 
     from django.core.urlresolvers import reverse 
     return reverse('meddy1.views.clinicProfile', args=[str(self.id)]) 

这里是views.py

def clinicProfile(request, slug, id): 
    clinic = Clinic.objects.get(id=id) 
    doctors = Doctor.objects.all().order_by('-netlikes') 

    d = getVariables() 

    d.update({'clinic': clinic, 'doctors': doctors, }) 
    return render(request, 'meddy1/clinicprofile.html', d) 

urls.py

url(r'^clinic/(?P<id>\d+)/$', views.clinicProfile, name='clinicProfile'), 

回答

2

你需要一个Slugfield或CharField添加到您的模型,当过你创建填充它或编辑你的模型。

class Clinic(models.Model): 
    name = models.CharField(max_length=500) 
    ... 
    slug = models.CharField(max_length=200) 



    def save(self, *args, **kwargs): 
     self.slug = slugify(self.name, instance=self) 
     super(Clinic, self).save(*args, **kwargs) 

编辑:

如果你有你的网址定义如@ Norman8054说:

url(r'^clinic/(?P<slug>\w+)/$', views.clinicProfile, name='clinicProfile'), 

你可以得到对象的意见吧:

from django.shortcuts import get_object_or_404 

def clinicProfile(request, slug): 
    clinic = Clinic.objects.get(slug=slug) 

那些是基本步骤。如果你想确定slug字段是否是unic的,你需要添加一些验证到保存方法,或者用模型的另一个字段拼凑。如果您认为slug字段可能会更改,那么您可能还需要将该对象的id添加到url。但这些都是基于用例的决定。

+0

感谢@cor。这只适用于我补充的新诊所。现有的诊所呢?我怎样才能让现有的诊所有一个slu as的诊所名称? – 2014-09-12 10:55:01

+0

我不知道最好的办法。我会从shell手动执行它。一旦你做出了改变并迁移de db,就像是:'clinics = Clinic.objects.all()'然后'在诊所就诊:clinic.slug = slugify(clinic.name,instance = clinic)' – cor 2014-09-12 10:59:26

+0

这是实际上比这更容易。诊所= Clinic.objects.all()'然后'在诊所诊所:clinic.save()'。另外请记住,诊所的名称必须是唯一的。你不能将同一个网址映射到两个不同的诊所。 – Jonathan 2014-09-12 11:10:45

0

只是为了延长心病的回答是:在你的urls.py使用named group

url(r'^clinic/(?P<slug>\w+)/$', views.clinicProfile, name='clinicProfile'),