python random.random () bewirkt, dass das Modul '' modul 'nicht aufgerufen werden kann, wenn es im benutzerdefinierten Vorlagen-Tag verwendet wird [duplizieren]

7

Wenn ich Python von der Kommandozeile aus starte und folgendes eintippe:

%Vor%

Es druckt mir eine Zufallszahl (Erwartet, sehr gut).

Wenn ich die obigen zwei Zeilen in meine models.py-Datei meiner django-Anwendung einfüge und meine django-App mit runserver starte, bekomme ich die Ausgabe in der Befehlszeile und zeige mir eine Zufallszahl (Großartig!)

Wenn ich ein benutzerdefiniertes Tag verwende, das ansonsten einwandfrei funktioniert, schließe ich

ein %Vor%

Als die ersten beiden Zeilen der .py-Datei des benutzerdefinierten Tags erhalte ich eine Fehlermeldung, wenn ich versuche, eine Vorlage zu öffnen, die dieses benutzerdefinierte Tag verwendet:

%Vor%

Beachten Sie, dass sich mein benutzerdefiniertes Tag wie erwartet verhält und kein Fehler ausgelöst wird, wenn ich diese beiden Zeilen loslasse. Leider brauche ich ein zufälliges Verhalten in meinem Template-Tag.

Das Problem ist, wenn ich in einem benutzerdefinierten Tag:

%Vor%

bei einem benutzerdefinierten Vorlagen-Tag importiert es

%Vor%

und nicht

%Vor%

wird normalerweise von überall anders importiert

Die Django-Template-Bibliothek hat einen Filter namens random, und irgendwie bekommt sie Vorrang vor dem zufälligen System.

Kann jemand empfehlen, den korrekten Python-Zufall explizit zu importieren?

    
Krystian Cybulski 08.05.2009, 01:55
quelle

3 Antworten

14

Die Antwort ist ... seltsam.

Als ich ursprünglich mein benutzerdefiniertes Tag geschrieben habe, habe ich es random.py genannt. Ich habe schnell gemerkt, dass dieser Name nicht gut sein kann und hat ihn in randomchoice.py umbenannt und meine random.py Datei gelöscht. Python hat die kompilierte random.pyc -Datei behalten und wurde immer geladen, wenn ich import random gemacht habe. Ich habe meine random.pyc Datei entfernt und das Problem ist weg.

    
Krystian Cybulski 08.05.2009, 03:39
quelle
5

Ja, diese Art von Fehlern ist ziemlich einfach. Im Grunde nennen Sie keinen Ihrer Dateinamen oder irgendetwas, das Sie mit den gleichen Namen wie alle wahrscheinlichen Python-Module erstellen, die Sie verwenden werden.

    
Chris 21.02.2010 19:39
quelle
2

Es ist eine Weile her, seit ich mit Django herumgebastelt habe, aber wenn random.random ein "Modul" ist, dann versuche random.random.random (). Oder versuchen Sie es einfach zufällig (). Du weißt einfach nicht, was hinter den Kulissen passiert.

Bearbeiten

Versuchen Sie Folgendes:

%Vor%     
Unknown 08.05.2009 02:28
quelle

Tags und Links