2017-02-01 3 views
-3

Je suis assez nouveau sur django et je travaille sur un site web qui a besoin d'une URL dynamique pour une table de base de données, et tout fonctionne bien, mais je voudrais savoir comment pour enlever le "? id =" de l'URL, donc plutôt queSupprimer "? Id =" des URL dynamiques

localhost:8000/dynamicurl/?id=XXXXX

l'URL devient

localhost:8000/dynamicurl/XXXXX

au lieu

Je l'ai fait une belle quantité de recherche dans la documentation et n » Je trouve beaucoup, mais il est assez probable que je manqué quelque chose.

EDIT: remercie tout le monde pour aider, la réponse la plus simple est d'enlever l'objet que j'utilisais pour récupérer l'ID et il suffit de remplacer l'ID dans exemple Evert,

donc mon URL est devenu

url(r'^dynamicurl/(?P[0-9]+)/$', views.dynamicurl)

et moi est devenu

def dynamicurl(request, id):

je suis comme très très nouveau pour django pour votre information

+3

De la documentation https://docs.djangoproject.com/en/1.10/topics/http/urls/#named -groups –

+0

Et le tutoriel. Et chaque morceau de texte d'introduction jamais écrit sur Django. –

Répondre

0

vous pouvez capturer une variable dans la définition d'URL dans le fichier apps urls.py. Il ressemblerait à quelque chose comme ceci:

url(r'^dynamicurl/(?P<id>[0-9]+)?$', dynamicurl, name = 'dynamicurl'), 

alors dans votre fonction de vue que vous recevez ce paramètre:

def dynamicurl(request, id): 
+0

alors j'ai essayé votre solution et cela n'a pas fonctionné, je pense que c'est à cause de la façon dont j'ai fait la vue, qui était d'utiliser idn = dinamicurl.request.GET.get (id = idn) pour trouver l'ID d'objet – YoungVenus

+0

vous postez votre code d'affichage et votre définition d'URL? – turbotux

+0

def pickoff (demande): = idn request.GET.get ('id') si idn: p = Pickoff.objects.get (id = idn) qui est ce qu'il était avant le changement et la url était url (r '^ pickoff /', views.pickoff) – YoungVenus

0

Si vous parlez de la façon de changer votre URL à l'intérieur du urls, je vous suggère d'utiliser code qui a déjà répondu ci-dessus: https://stackoverflow.com/a/41988051/6396981

Mais, si vous parler de la façon de rediriger localhost:8000/dynamicurl/?id=XXXXX à localhost:8000/dynamicurl/XXXXX, espérons que cela ..

USEFULL

1. views.py

from django.http import HttpResponse 
from django.views.generic.base import RedirectView 
from django.core.urlresolvers import reverse 


class RedirectView(RedirectView): 
    permanent = False 

    def get_redirect_url(self): 
     get_id = self.request.GET.get('id') 
     if get_id is not None: 
      return reverse('redirected_page', kwargs={'id': id}) 
     return reverse('origin_page') 


def redirected_view(request, id): 
    # your final view goes here... 
    return HttpResponse("You're looking for id: %d." % id) 

2. urls.py

from django.conf.urls import url 
from yourapp.views import views (RedirectView, redirected_view) 


urlpatterns = [ 
    # first view the pool to doing redirection 
    url(r'^pool/$', RedirectView.as_view(), name='origin_page'), 

    # the final url 
    url(r'^pool/(?P<id>[\d]+)/$', redirected_view, name='redirected_page'), 
]