J'ai un modèle qui doit stocker les URL qui feront partie de l'environnement Django. Si je stockais des URL normales, j'utiliserais models.URLField
, et utiliserais verify_exists
pour m'assurer que l'URL existe réellement.Django et les URL locales de test existent
Cependant, cela ne marche pas très bien en développement, puisque le serveur dev est mono-thread, il se bloque indéfiniment, car il ne peut pas traiter deux requêtes à la fois.
J'espérais faire quelque chose en utilisant resolve()
, mais je suis mal à s'adapter la fonction myview
à la fin de cette page de documentation à une version qui ne prend pas une demande, puisque je veux vérifier qu'une URL locale donnée peut être résolu, et appelé sans 404 étant soulevé, d'une session vide.
J'espérais faire cela avec un validator, quelque chose comme ceci:
def validate_local_url(value):
try:
view, args, kwargs = resolve(value)
view(*args, **kwargs)
except Resolver404:
raise ValidationError(u'%s is not a local URL (not a valid URL)' % value)
except Http404:
raise ValidationError(u'%s is not a local URL (does not exist)' % value)
Cependant, cela ne fonctionne pas sans objet request
valide étant passé dans kwargs
. Comment générer un objet de requête factice (vide)? J'ai essayé juste en utilisant django.http.HttpRequest
.
À quel point voulez-vous être strict? Voulez-vous qu'il soit impossible de lier un enregistrement manquant ou supprimé, ou voulez-vous simplement vous assurer qu'il correspond à une vue de votre application? –
@Jordan - Je veux m'assurer qu'il correspond à une certaine vue, et avec les arguments que les valeurs de 'resolve' passées à la vue, ne soulève pas un' Http404'. –