2014-09-12 1 views
0

У меня есть модель клиники и в настоящее время их ссылки выглядят как этотДжанго 1.6: создание пробкового URL

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) 

Edit:

Если ваш URL определяется как @ 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, вам нужно добавить некоторую проверку на метод сохранения или выполнить slugify с другим полем модели. Если вы считаете, что поле slug может измениться, вам, вероятно, необходимо добавить идентификатор объекта к URL-адресу. Но это решения на основе конкретных случаев.

+0

Благодаря @cor. Это будет работать только для новых клиник, которые я добавляю. Как насчет существующих клиник? Как я могу заставить существующие клиники иметь слизь в качестве имени клиники? –

+0

Я не знаю, как это сделать. Я сделал бы это вручную из оболочки. После того, как вы внесете изменения и перенесете de db, что-то вроде: «clinics = Clinic.objects.all()», а затем «для клиники в клиниках: clinic.slug = slugify (clinic.name, instance = clinic)» – cor

+0

Это на самом деле легче, чем это. 'clinics = Clinic.objects.all()', а затем 'для клиники в клиниках: clinic.save()'. Также имейте в виду, что имена клиник должны быть уникальными. Вы не можете сопоставить одни и те же URL-адреса в двух разных клиниках. – Jonathan

0

Просто продлить ответ COR в: Используйте named group в вашем urls.py:

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