我注意到Django 1.7和更新的1.8官方教程之间的语法上的这个微小变化。
1.7
from django.contrib import admin
from polls.models import Question
admin.site.register(Question)
1.8(您可以看到该应用已删除)
from django.contrib import admin
from .models import Question
admin.site.register(Question)
为什么要改变?哪个更好的代码? 忘了正确的终结,但与点击运算符有关。
我也看过像这样使用的点运算符;这意味着什么?
from django.conf.urls import url
from . import views
完成一些测试/学习,并想知道如何以及通过这种方式使用它。 谢谢大家。
答案 0 :(得分:1)
这至少有点主观,但在我看来,当您尝试从同一个包中导入文件时,相对导入通常会更好。
如果您碰巧在当前包中有一个名为polls
的模块,但在顶层有一个名为polls
的包,那么使用polls
对读者来说是不明确的 - 并且旧版本与新版本Python的不同含义。但是使用.
对任何读者或任何版本的Python只有一个含义,并且它无法与其他任何意外碰撞。
此外,使用相对导入,您可以重命名您的包,一切仍然有效;绝对地,你必须编辑每个文件。如果将包移到另一个包中,可能需要进行更大的更改。
还有一些小的原因。如果您不小心将包放在sys.path
上(例如,通过运行顶级应用程序并将当前工作目录设置为包),通常可以更轻松地使用相对导入进行调试。使用相对导入导入自己(在某些情况下,通过pickle或多处理隐式执行)会更容易。
使用旧样式的最佳理由是,您需要向后兼容Python 2.5或更早版本。 (Django曾经支持过,但不再支持。虽然我不知道他们是否切换到了1.8,因为那时他们已经删除了足够的旧版本。)
阅读PEP 328以进一步讨论基本原理。